ios segue "cancel"

12

根据XML返回的结果,当用户点击UIButton时,我不想执行当前的segue

我知道可以选择想要执行的segue,但是如何让segue不执行?或者至少不执行任何可用的segue

3个回答

25
如果你的部署目标是iOS 6.0或更高版本,你可以重写-[UIViewController shouldPerformSegueWithIdentifier:sender:]方法,如果想执行segue就返回YES,否则返回NO
如果你的部署目标早于iOS 6.0,则不会收到shouldPerformSegueWithIdentifier:sender:消息。所以在你的storyboard中,不要从按钮上画连线。取而代之的是,从按钮的视图控制器上画连线,并给segue一个标识符。将按钮连接到其视图控制器中的一个IBAction。在该操作中,检查是否要执行segue。如果要执行,发送自己 performSegueWithIdentifier:sender:,并传递你在storyboard中分配给segue的标识符。

[self performSegueWithIdentifier:@"myIdentifier" sender:self]; 正确吗?Xcode 给了我一个 SIGABRT :( - Jacksonkr
你需要设置一个异常断点来查看出了什么问题。 - rob mayoff

3

Apple Developer Documentation提供了正确的方法来取消在Storyboard中管理的segue:

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender

例如:

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
    if ([identifier isEqualToString:@"listPopover"]) {
        if (self.listPopover == nil) {
            // Allow the popover segue
            return YES;
        }
        // Cancel the popover segue
        return NO;
    }
    // Allow all other segues
    return YES;
}

shouldPerformSegueWithIdentifier:sender: 消息是在 iOS 6 中添加的,不会被在早期版本的 iOS 运行的设备发送。当发布这个问题时,iOS 6 尚未发布。 - rob mayoff

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接