如何从另一个NSView(不同的swift文件)更改NSTextField值

时间:2016-03-18 14:15:55

标签: swift macos nsview nstextfield

我有两个不同的 NSViews viewA ViewA.swift 控制 viewB < / strong>由 ViewB.swift 控制。我想从更改 viewB 中的textField( NSTextField ) viewA 即可。

我通过从 viewA 创建 viewB 的实例来更改它,但是我收到了错误

以下是我在 viewA 中创建实例的方法:

let myViewB = ViewB()
myViewB.changeValue = myString

viewB 中声明:

var myString = "" {
    didSet {
        myNSTextField.stringValue(myString)
    }
}

这是我更改 NSTextField 值时出现的错误:

  

在解包可选值时意外发现nil



UPDATE:

档案ViewB.swift

class ViewB: NSView {
    ...
    @IBOutlet weak var widthTextField: NSTextField!
    ...
}

档案ViewA.swift

 let myViewB = ViewB()

 class ViewA: NSView {
     ...
     if *statement* {
          ....
          myViewB.widthTextField.stringValue("try") // <- here i get the error
          ....
     }
     ...
}

2 个答案:

答案 0 :(得分:1)

我终于修好了!我创建了一个变量,其中包含将其更改为需要的文本:(使用您的测试项目)

在ViewA课程中

    import Cocoa

var textToSet = "Hello"

class ViewA: NSView {
    override func drawRect(dirtyRect: NSRect) {
        super.drawRect(dirtyRect)

        // Drawing code here.
    }

    @IBAction func editPressed(sender: AnyObject) {
        textToSet = "No"
    }

}

在ViewB课程中

import Cocoa

class ViewB: NSView{

    @IBOutlet var myTextField: NSTextField!
    override func drawRect(dirtyRect: NSRect) {
        super.drawRect(dirtyRect)

        myTextField.stringValue = textToSet
        // Drawing code here.
    }

}

答案 1 :(得分:0)

在你的代码中,你生成了一个stringValue的新对象(我想)。它有效吗?

class ViewB: NSView {
    @IBOutlet weak var widthTextField: NSTextField!
}
let myViewB = ViewB()

class ViewA: NSView {
    if *statement* {
        myViewB.widthTextField.stringValue = "try" //setting it "try" without recreating the stringValue (done by "()")
    }

}