在alertview显示时,请勿连接segue

时间:2013-04-15 12:43:18

标签: iphone ios objective-c

我在故事板中连接了一个push segue然后我正在使用这样的prepareForSegue方法:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"start"] && self.name.textField.text == nil)
    {


        UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Test"
                                                          message:@"Test
                                                         delegate:self
                                                cancelButtonTitle:@"OK"
                                                otherButtonTitles:nil];
        [message show];

    }
}

我想要做的是,如果“if”为真,则弹出一个警告框并预先形成segue,但我只想显示警告框,我不想预先形成segue。我该如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

当要执行segue时,将调用

prepareForSegue:sender:。你不能在那时取消它。

如果你想取消一个segue,你应该重写的方法是shouldPerformSegueWithIdentifier:sender:

答案 1 :(得分:1)

我认为您需要在此处重新评估您的逻辑并从prepareForSegue

中删除条件

使用UIAlertDelegate

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    NSString *title = [alertView buttonTitleAtIndex:buttonIndex];
    if([title isEqualToString:@"OK"]) {
      [self performSegueWithIdentifier:@"My Segue" sender:self];
      return;
    } // else do not perform segue
}

答案 2 :(得分:0)

我认为你现在不能停下来。

但你可以使用 来自iOS 6的- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender

答案 3 :(得分:0)

尝试给你的segue一个不同的名字,如果警报没有显示,只调用那个segue(例如“[self performSegueWithIdentifier: @"MyRealStartSegue" sender: sender]”)。

当然,这意味着您需要检查“prepareForSegue”方法 之外的这些条件。当按下某个按钮时,也许是IBAction?