人工触发 Segue
Posted
技术标签:
【中文标题】人工触发 Segue【英文标题】:Trigger Segue Artificially 【发布时间】:2015-03-05 15:25:40 【问题描述】:我正在尝试使用 Swift 在 OS X 故事板应用程序中的两个 viewContoller 之间传递数据。当我按下 VC1 上的按钮时,它会打开 VC2,然后运行 prepareForSegue。但是,我无法将数据传回 VC1,因为 a. prepareForSegue 没有运行(因为没有打开一个窗口)和 b。因为即使是这样,VC1 也不知道正在发送数据,而且我无法找出一个函数(类似于 viewDidBecomeFocus,如果存在这样的函数)让它知道要查看。我觉得一定有办法做到这一点。
如果您知道在 ios 但不知道在 OSX 中执行此操作的方法,它仍然很有用。 谢谢!
【问题讨论】:
这里有一个很好的代表教程:link 【参考方案1】:假设在您的第一个 ViewController 中有一个标签和一个按钮。按下时,该按钮打开弹出窗口(SecondViewController),带有一个文本字段(以及一个按钮表示准备好或关闭等),您希望在其中获取其值并将其分配给您的标签。这就是委托和协议派上用场的地方。
第二视图控制器:
@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)
这是视图控制器:
@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
【讨论】:
以上是关于人工触发 Segue的主要内容,如果未能解决你的问题,请参考以下文章