使用数据在 2 个不同的 NSViewController 之间切换
Posted
技术标签:
【中文标题】使用数据在 2 个不同的 NSViewController 之间切换【英文标题】:Swiching between 2 diferent NSViewControllers with data 【发布时间】:2018-07-18 00:25:39 【问题描述】:我是 Swift 和 OSX 开发的绝对新手,如果我的问题太菜鸟,我很抱歉。我想了解 NSViewControllers 之间的导航原理。
我有我的默认ViewController
,其中是登录名和密码字段以及登录按钮。单击按钮后,返回令牌。现在我试图将“视图”更改为SecondViewController
并保存某处令牌,我将来会需要它。我该怎么做?并且可以在函数中做到这一点吗?:
@IBAction func loginButton(_ sender: Any)
....
谢谢!
【问题讨论】:
相关(是关于 ios,但很多东西也适用于 macOS):***.com/q/5210535/3151675 【参考方案1】:您需要使用segues
来执行此操作。
首先使用故事板编辑器在ViewControllers
之间建立segues
连接。之后,您需要在情节提要的属性检查器上为 segues
提供一个标识符。然后在您的代码中,您可以通过segue
调用新的ViewController
,如下面的代码所示。
通过此代码,您可以使用按钮传递数据:
class ViewController: NSViewController
var dataToPass: String = "DataToPass"
override func viewDidLoad()
super.viewDidLoad()
@IBAction func loginButton(_ sender: Any)
performSegue(withIdentifier: NSStoryboardSegue.Identifier(rawValue: "segueIdentifier"), sender: self)
override func prepare(for segue: NSStoryboardSegue, sender: Any?)
if segue.identifier!.rawValue == "segueIdentifier"
let destinationViewController = segue.destinationController as! ViewController2
destinationViewController.dataToReceive = dataToPass
class ViewController2: NSViewController
var dataToReceive: String
override func viewDidLoad()
super.viewDidLoad()
使用此代码,您将使用override viewWillAppear
class ViewController: NSViewController
var dataToPass: String = "DataToPass"
override func viewDidLoad()
super.viewDidLoad()
override func viewWillAppear()
performSegue(withIdentifier: NSStoryboardSegue.Identifier(rawValue: "segueIdentifier"), sender: self)
override func prepare(for segue: NSStoryboardSegue, sender: Any?)
if segue.identifier!.rawValue == "segueIdentifier"
let destinationViewController = segue.destinationController as! ViewController2
destinationViewController.dataToReceive = dataToPass
class ViewController2: NSViewController
var dataToReceive: String
override func viewDidLoad()
super.viewDidLoad()
在这两种情况下,您都需要确保要传递给其他视图控制器的数据不为空。
【讨论】:
感谢您的帮助。现在我可以在单击按钮时传输数据。但是当我尝试在两个ViewControllers
之间进行排序时,我只有 (show/modal/sheet/popover/custom) 选项。是否有可能在初始窗口中显示 ViewController2?将 ViewController 替换为 ViewController2。
您可以更改故事板上的初始视图控制器,但这样您将无法将数据传递给它,因为它将是第一个视图控制器。您可以做的另一种方法是在viewDidLoad
或viewWillAppear
上执行segue,保持override prepare
传递数据。
我不明白该怎么做。我可以问你一个代码示例吗?再次感谢您!
我已经编辑了答案以包含示例。看看吧。
明天早上会检查,现在我不在电脑旁。不过还是谢谢!以上是关于使用数据在 2 个不同的 NSViewController 之间切换的主要内容,如果未能解决你的问题,请参考以下文章
如何在 php pdo 中使用 1 个表单将数据插入到 2 个不同的表中?
React Hook 在单击 2 个不同的按钮时从 APi 获取数据