macos - 人工触发 Segue

标签 macos swift segue viewcontroller

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

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

最佳答案

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

第二个 View Controller :

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

这是 View Controller :

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

关于macos - 人工触发 Segue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28881482/

相关文章:

swift - 在沙盒 macOS 应用程序的 ApplicationScripts 目录中创建文件

ios - 发送数据时出错

iOS 使用 JSON 加载外部数据——Segue 崩溃并出现错误 : [__NSCFNumber length]: unrecognized selector sent to instance

ios - 导航堆栈不会更新,从 GMSAutocompleteResultsViewController 继续

ios - 我们可以在 2012 年中期在 MacBook pro 上开发 ios 15 应用程序吗,我们可以获取开发者帐户以在旧 mac 上下载最新的 MacOS 和 Xcode 吗?

macos - CGWindowListCreateImage 在缩放时产生模糊的 cgImage

将 OS X 升级到 Mojave 10.14.4 后,C 头文件丢失

ios - 将 JSON 字典转换为 NSDictionary

swift - Rx swift : use a combination of operators to download a photo and save it locally

swift - 在 Swift 中检测并删除空白的 tableViewCell