人为地触发瞄准

时间:2015-03-05 15:25:41

标签: macos swift segue viewcontroller

我正在尝试使用Swift在OS X故事板应用程序中的两个viewContoller之间传递数据。当我按下VC1上的按钮时,它会打开VC2,并运行prepareForSegue。但是,由于a,我无法将数据传回VC1。 prepareForSegue没有运行(因为没有打开窗口)和b。因为即使它是,VC1也不知道正在发送数据,我无法找出一个函数(如viewDidBecomeFocus,如果存在这样的函数)让它知道要查看。我觉得必须有办法做到这一点。

如果您知道在IOS中执行此操作但不是OSX的方法,它仍然可能有用。 谢谢!

1 个答案:

答案 0 :(得分:1)

假设您的第一个ViewController中有一个标签和一个按钮。按下时,该按钮打开带有一个文本字段的弹出窗口(SecondViewController)(以及一个表示准备或关闭等的按钮),您需要在其中获取其值并将其分配给您的标签。这就是代表和协议派上用场的地方。

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)
    }
}

这是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
}