Amr*_*nes 26 iphone objective-c ios segue uistoryboardsegue
基于斯坦福iOS课程,我正在使用模态视图控制器.在演示中,他们有一个按钮可以启动模态视图,当它被点击时,函数prepareForSegue被调用.我将代码和实现模仿到我的项目中,唯一的区别是我的演示是在iPhone故事板上,而他们的是在iPad上.
我注意到,当我的模态视图控制器出现时,它在此之前不会调用prepareForSegue.在查看prepareForSegue之前,我搜索了斯坦福项目,看看他们可以在哪里注册任何segue行为,但是没有证据.任何人都可以对此有所了解.我搜索了堆栈溢出,我发现所有用户都缺少performSegueWithIdentifier的调用实现.然而,在斯坦福大学的演示中他们从未这样做过.
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier hasPrefix:@"Create Label"]) {
AskerViewController *asker = (AskerViewController *)segue.destinationViewController;
asker.question = @"What do you want your label to say?";
asker.answer = @"Label Text";
asker.delegate = self;
}
}
Run Code Online (Sandbox Code Playgroud)
这是故事板的一个例子:
这是我的故事板的一个例子:
在调试器中,当我停在斯坦福演示代码中时,调用堆栈显示故事板正在执行segue操作,我需要在故事板中配置什么才能获得相同的结果?
Amr*_*nes 32
好吧,事实证明,我的视图控制器按钮调用模态视图没有实现prepareForSegue的正确类.它是默认的UIViewController,而不是我的自定义类.
我想出来的方法是在viewDidLoad中设置一个断点,即使这没有破坏,因此我怀疑在故事板中我没有与实现按钮的视图相关联的正确类.
Man*_* BM 12
对于有这个问题的其他人,如果你现在使用的Swift 3具有以下功能将不会抛出错误,因为它是正确的语法但它不起作用,因为它是Swift 2函数:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// code
}
Run Code Online (Sandbox Code Playgroud)
您必须更新到Swift 3"准备"功能才能使其适用于segues:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// code
}
Run Code Online (Sandbox Code Playgroud)
Don*_*ghn 11
当连接表视图的自动segue时,除了Amro的答案(不分配相应的子类)之外,还有另外两个prepareForSegue
可能未被调用的情况.确保你:
从表视图原型单元,而不是表视图控制器连接segue .
在segue连接弹出菜单中的"Selection Segue"组下使用了一个segue,而不是 "辅助操作"下的一个.
[点击图片放大]
无论是代码下面的Modal还是Push Segue,都会被调用
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"Create Label"]) {
SignUpViewController *asker = segue.destinationViewController;
}
}
Run Code Online (Sandbox Code Playgroud)