1

我在情节提要中连接了一个 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];

    }
}

我想要做的是,如果“如果”为真,则会弹出一个警报框并执行转场,但我只想显示警报框,而我不想执行转场。我该如何解决这个问题?

4

4 回答 4

3

prepareForSegue:sender:在即将执行 segue 时调用。那时您无法取消它。

如果您希望能够取消 segue,您应该覆盖的方法是shouldPerformSegueWithIdentifier:sender:.

于 2013-04-15T12:50:19.113 回答
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
}
于 2013-04-15T12:52:35.273 回答
0

我认为你不能在这一点上停下来。

但您可以 - (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender从 iOS 6 开始使用。

于 2013-04-15T12:48:22.203 回答
0

[self performSegueWithIdentifier: @"MyRealStartSegue" sender: sender]尝试为您的 segue 指定一个不同的名称,并且仅在未显示警报时才调用该 segue(例如“ ”)。

当然,这意味着您需要在 " " 方法之外检查这些条件。prepareForSegue按下某个按钮时可能是 IBAction?

于 2013-04-15T12:49:01.520 回答