cocoa - what happen when close a window (by pressing the red X button)?

257 views Asked by At

I'm writing an app for MacOS to display a string to a NSTextfield in a window when user click on the button in the status bar menu (application is an agent). The thing is I want to use the NSScrollView to embrace that NSTextview so that the NSTextview is scrollable. It sound simple but some thing happen:

  • (1) When I click the button on the menu, the window appear using the NSWindowController.showWindow(). But if the string is large (larger than the clipview), the NSScrollView isn't scrollable. If I select the text inside, then I can select the rest of the text that doesn't appear in the clipview

unscrollable

  • (2) If I leave the window there and click to the button again, then the the text is scrollable and the scrollbar appear!

scrollable

  • (3) If I close the window by click on the red X button on top-left, then click to the button, then the window appear with the same situation at first (isn't scrollable). Notice that I don't recreate the new instance of NSWindowController of the window, at this time I just do the showWindow() with the old instance of the NSWindowController

This is the code:

    if(newWC.window == nil){
        let storyboard = NSStoryboard(name: "Main", bundle: nil)
        newWC = storyboard?.instantiateControllerWithIdentifier("newWC") as! NewWindowController
        newWC.window?.level = kCGStatusWindowLevelKey
        println("new window")
    }
    newWC.showWindow(self)

    //This is the ViewController contain the NSScrollView and the TextField
    manualCopyView = newWC.window?.contentViewController as! ManualCopyViewController


    var theScrollView = manualCopyView.theScrollView
    var manualTextField = manualCopyView.manualEditTextField

    //Calculate height of a block of string
    manualTextField.stringValue = totalString.stringByAppendingString("")
    var textFieldHeight = (manualTextField.cell() as! NSTextFieldCell).cellSizeForBounds(NSMakeRect(0, 0, 448, CGFloat(FLT_MAX))).height

    if(textFieldHeight < 200){
        textFieldHeight = 200
    }
    var frame = manualCopyView.manualEditTextField.frame
    var clipViewFrame = theScrollView.contentView.frame
    frame.size.height = textFieldHeight

    //Change the frame of the textfield to fit the content string
    manualTextField.frame = frame

    //Gain focus to the new window
    NSApp.activateIgnoringOtherApps(true)

It look like when the window first appear (or re-appear), the NSTextField is shrink even that I changed it's frame. But if I don't close it and show the window again, the frame expand as expected

I also used auto layout with constraints in the width and height of the scrollview and the width and minimum height (>= 200) of the textfield (because I think the height would be expanded)

Another question in this case: I have to set the scrollview Vertical Elasticity to No Elasticity or even the second case won't work. Is that normal?

Thank for any help.

0

There are 0 answers