人为触发 Segue
Trigger Segue Artificially
我正在尝试使用 Swift 在 OS X 故事板应用程序中的两个 viewContoller 之间传递数据。当我在 VC1 上按下一个按钮时,它会打开 VC2,并且 prepareForSegue 是 运行。但是,我无法将数据传回 VC1,因为 a. prepareForSegue 没有被 运行 (因为 a window 没有被打开)和 b。因为即使是这样,VC1 也不知道正在发送数据,而且我无法找出一个函数(比如 viewDidBecomeFocus,如果存在这样的函数)让它知道要查看。我觉得一定有办法做到这一点。
如果您知道在 IOS 而不是 OSX 中执行此操作的方法,它仍然有用。
谢谢!
假设在您的第一个 ViewController 中您有一个标签和一个按钮。按下时,该按钮会打开带有一个文本字段(和一个按钮表示就绪或关闭等)的弹出窗口(第二个ViewController),您可以在其中获取其值并将其分配给您的标签。这就是代表和协议派上用场的地方。
第二ViewController:
@objc protocol TextDelegate {
func passedString(textValue: String)
}
class SecondViewController: NSViewController {
@IBOutlet weak var textField: NSTextField!
weak var delegate: TextDelegate?
override func viewDidLoad() {
super.viewDidLoad()
// Do view setup here.
}
@IBAction func closePopOver(sender: AnyObject) {
if delegate != nil {
delegate!.passedString(textField.stringValue)
}
self.dismissViewController(self)
}
}
这是ViewController:
@IBOutlet weak var myLabel: NSTextField!
override func prepareForSegue(segue: NSStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "mySegue" {
let vc = segue.destinationController as! SecondViewController
vc.delegate = self
}
}
func passedString(textValue: String) {
myLabel.stringValue = textValue
}
我正在尝试使用 Swift 在 OS X 故事板应用程序中的两个 viewContoller 之间传递数据。当我在 VC1 上按下一个按钮时,它会打开 VC2,并且 prepareForSegue 是 运行。但是,我无法将数据传回 VC1,因为 a. prepareForSegue 没有被 运行 (因为 a window 没有被打开)和 b。因为即使是这样,VC1 也不知道正在发送数据,而且我无法找出一个函数(比如 viewDidBecomeFocus,如果存在这样的函数)让它知道要查看。我觉得一定有办法做到这一点。
如果您知道在 IOS 而不是 OSX 中执行此操作的方法,它仍然有用。 谢谢!
假设在您的第一个 ViewController 中您有一个标签和一个按钮。按下时,该按钮会打开带有一个文本字段(和一个按钮表示就绪或关闭等)的弹出窗口(第二个ViewController),您可以在其中获取其值并将其分配给您的标签。这就是代表和协议派上用场的地方。
第二ViewController:
@objc protocol TextDelegate {
func passedString(textValue: String)
}
class SecondViewController: NSViewController {
@IBOutlet weak var textField: NSTextField!
weak var delegate: TextDelegate?
override func viewDidLoad() {
super.viewDidLoad()
// Do view setup here.
}
@IBAction func closePopOver(sender: AnyObject) {
if delegate != nil {
delegate!.passedString(textField.stringValue)
}
self.dismissViewController(self)
}
}
这是ViewController:
@IBOutlet weak var myLabel: NSTextField!
override func prepareForSegue(segue: NSStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "mySegue" {
let vc = segue.destinationController as! SecondViewController
vc.delegate = self
}
}
func passedString(textValue: String) {
myLabel.stringValue = textValue
}