segue.identifier = 在第二个视图中为零
segue.identifier = nil in second view
我有 IOS Swift 程序,使用 Storyboards 和 NavigationController。
有两个View,我们称它们为mainView,secondView。
从 mainView 我有 BarButtonItem 转到 secondView。按下该按钮时,它会触发 mainView 中的 prepareForSegue 函数 segue.identifier = "secondView"
当我打开例如第二个视图,我有两个用于取消和保存的 BarButtonItems。当按下其中任何一个时,该视图中的 prepareForSegue 函数被触发,但现在 segue.identifier = nil.
我希望 segue.identifier = "cancel" 或 "save" 取决于在该视图中按下的按钮。
我是不是误解了 segue 功能?任何人都可以尝试就此启发我,因为这看起来像是情节提要和导航中非常重要且有用的部分 - 但不知何故我没有做对。
您是否为第二个视图中的取消和保存按钮创建了操作?
右键单击并从故事板拖动到视图控制器代码和下拉列表中的 select 操作。
然后在 action 方法中,执行你的 segue。
@Garret、@rdelmar、@syed-tariq - 感谢您为我指明正确的方向。
原来是 Unwind Segue 让我走上了正轨:Xcode Swift Go back to previous viewController (TableViewController)
但我还发现我在故事板中犯了一个错误,因为我在所有视图上都有导航控制器(是的,我知道 - 愚蠢的当你知道得更多):
最后一个难题是了解 Protocols and Deligates 让这一切正常工作。
综上所述,简而言之:
我在第二个视图中创建了一个协议(在 class 之上)
protocol MyDelegate: class {
func getMyList(sender: MySecondView) -> [NSManagedObject] //returns a CoreData list
}
然后我在第二个视图中创建了一个委托变量
weak var datasource: MyDelegate!
在我的第一个视图中,我实现了协议,这只是一个简单的函数,返回我在第二个视图中需要的列表
在我的第一个视图中,我有 prepareForSegue,在那里我捕获了正确的 segue.identifier,然后我通过 segue.destinationViewController 设置委托,就像这样
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
if segue.identifier == "mySegue" {
let vc = segue.destinationViewController as! MySecondView
vc.delegate = self
}
}
就是这样 - 现在神奇的是流程是正确的,segues 发生了,delegates 正确地通过了,一切都很好:)
我有 IOS Swift 程序,使用 Storyboards 和 NavigationController。 有两个View,我们称它们为mainView,secondView。
从 mainView 我有 BarButtonItem 转到 secondView。按下该按钮时,它会触发 mainView 中的 prepareForSegue 函数 segue.identifier = "secondView"
当我打开例如第二个视图,我有两个用于取消和保存的 BarButtonItems。当按下其中任何一个时,该视图中的 prepareForSegue 函数被触发,但现在 segue.identifier = nil.
我希望 segue.identifier = "cancel" 或 "save" 取决于在该视图中按下的按钮。
我是不是误解了 segue 功能?任何人都可以尝试就此启发我,因为这看起来像是情节提要和导航中非常重要且有用的部分 - 但不知何故我没有做对。
您是否为第二个视图中的取消和保存按钮创建了操作? 右键单击并从故事板拖动到视图控制器代码和下拉列表中的 select 操作。
然后在 action 方法中,执行你的 segue。
@Garret、@rdelmar、@syed-tariq - 感谢您为我指明正确的方向。
原来是 Unwind Segue 让我走上了正轨:Xcode Swift Go back to previous viewController (TableViewController)
但我还发现我在故事板中犯了一个错误,因为我在所有视图上都有导航控制器(是的,我知道 - 愚蠢的当你知道得更多):
最后一个难题是了解 Protocols and Deligates 让这一切正常工作。
综上所述,简而言之:
我在第二个视图中创建了一个协议(在 class 之上)
protocol MyDelegate: class { func getMyList(sender: MySecondView) -> [NSManagedObject] //returns a CoreData list }
然后我在第二个视图中创建了一个委托变量
weak var datasource: MyDelegate!
在我的第一个视图中,我实现了协议,这只是一个简单的函数,返回我在第二个视图中需要的列表
在我的第一个视图中,我有 prepareForSegue,在那里我捕获了正确的 segue.identifier,然后我通过 segue.destinationViewController 设置委托,就像这样
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { // Get the new view controller using [segue destinationViewController]. // Pass the selected object to the new view controller. if segue.identifier == "mySegue" { let vc = segue.destinationViewController as! MySecondView vc.delegate = self } }
就是这样 - 现在神奇的是流程是正确的,segues 发生了,delegates 正确地通过了,一切都很好:)