在 Segue 之后失去@IBOutlets
Posted
技术标签:
【中文标题】在 Segue 之后失去@IBOutlets【英文标题】:Losing @IBOutlets after Segue 【发布时间】:2017-10-22 23:09:21 【问题描述】:我正在使用 Xcode 视图编辑器和 Swift。
我的主视图包含一个带有 2 个标签的标签栏控制器。
在第二个选项卡上,我有一个 @IBoutlet var myLabel: UITextLabel!
。在viewWillAppear
里面我在这个标签里放了一些文字。
在第一个选项卡上,我有一个按钮,它通过 Push segue 启动第三个视图,在这个新选项卡上,我有一个返回按钮,它可以让我回到包含选项卡栏控制器的主视图(通过推送继续)。
当我启动我的应用程序时,进入我的第二个选项卡,UITextLabel
的文本已更改。
我仍然可以转到我的第一个选项卡并在它们之间导航它可以工作。
但问题是当我单击第一个选项卡的按钮,然后单击取消,然后返回到第二个选项卡时,我的 UITextLabel 没有改变。而且我不能再对它执行任何操作了。虽然它不是 nil,但它就像它仍然连接到 segue 之前的第一个 UITextLabel 而不是这个。
我哪里错了?
【问题讨论】:
【参考方案1】:有几处是错误的。
对于选项卡式应用程序,Apple 表示选项卡栏控制器应该是应用程序的根级导航方法。它应该始终存在,并且用户应该始终能够点击另一个水龙头以切换到应用程序的另一部分。
所以第一个选项卡应该连接到导航控制器。当用户按下按钮时,您应该将新的视图控制器推送到该导航控制器上。标签栏仍然可见并启用,用户仍然可以切换到视图控制器一。
下一件事:
你说“我有一个后退按钮,它可以让我回到包含标签栏控制器的主视图(也通过 push segue)。”
这是非常错误的。后退按钮应该从当前导航堆栈中弹出一个视图。他们不应该推动任何事情。任何时候使用 push segue,您都在创建并推送一个全新的视图控制器实例,并将其他视图控制器留在导航堆栈中。
【讨论】:
以上是关于在 Segue 之后失去@IBOutlets的主要内容,如果未能解决你的问题,请参考以下文章
Swift - 在 segue 之后保存 ViewController 设置
Swift,SpriteKit,GameViewController 和 MainViewController 在 GameOver 之后的 Segue