iOS segue执行了两次

时间:2013-11-27 01:10:13

标签: ios iphone objective-c ios7 segue

我有一个表视图,其中包含不同类型的表视图单元格。在其中一个单元格中,有两个按钮,按下时加载视图控制器。我使用以下功能来处理按钮按下:

- (IBAction)leftButtonPressed:(id)sender
{
    // Getting the pressed button
    UIButton *button = (UIButton*)sender;
    // Getting the indexpath
    NSIndexPath *indPath = [NSIndexPath indexPathForRow:button.tag inSection:0];
    // Loading the proper data from my datasource
    NSArray *clickedEvent = [[[SOEventManager sharedEventManager] eventsArray] objectAtIndex:indPath.row];
    [[SOEventManager sharedEventManager] setSelectedEvent:clickedEvent[0]];
    // Everything working as it should up to this point
    // Performing seque...
    [self performSegueWithIdentifier:@"buttonSegue" sender:self];
}

我的buttonSegue应该推送一个新的视图控制器。不管怎样,而不是推动一次,它似乎推了两次,所以我得到以下警告:

2013-11-27 01:48:30.894 Self-Ordering App[2081:70b] nested push animation can result in corrupted navigation bar 
2013-11-27 01:48:31.570 Self-Ordering App[2081:70b] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.

在我的情况下,它会导致崩溃,因为有一个事件我希望应用程序立即弹出视图控制器,以便返回到我的表视图。我使用alertview来处理事件并使用以下内容:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    NSString *buttonTitle = [alertView buttonTitleAtIndex:buttonIndex];
    // ...
    // Additional checking of button titles....
    else if ([buttonTitle isEqualToString:NSLocalizedString(@"Vissza", nil)])
    {
        [self.navigationController popViewControllerAnimated:YES];
    }
}

我可能会感兴趣的是,我的“常规”表格视图中有另一个segue,在这种情况下我使用prepareForSegue:方法

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"detailSegue"])
    {
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        SOEvent *selectedEvent = [[[SOEventManager sharedEventManager] eventsArray] objectAtIndex:indexPath.row];
        [[SOEventManager sharedEventManager] setSelectedEvent:selectedEvent];
    }
}

在这种情况下,视图控制器会被完美地推送,如果需要,甚至会立即弹出。我正在iOS7和Xcode 5上测试这个。我之前没有遇到这样的问题,我们将非常感谢任何帮助。

4 个答案:

答案 0 :(得分:17)

也许你想用View Controllers而不是UIButtons连接你的segue!

您应该将segue连接到某个按钮,如下所示: enter image description here

但您应该使用视图控制器连接它们: enter image description here

答案 1 :(得分:16)

回答可以poyrazoğlu

  

您确定已在界面中正确连接了操作   建设者?也许你已经将事件连接起来,比如说,内部触摸起来   并触摸内部,而不是只是在里面触摸。或者你也许   还从接口构建器中再次分配了两个代码中的segue。   你检查过吗?这是一个常见的错误。 -

我正在为storyboard和tableview的数据源方法中的每个按钮分配内部操作。

感谢您的快速帮助canpoyrazoğlu !!

答案 2 :(得分:9)

对于Swift 3,xcode和ios 9+,我正在使用它:确保从UIViewControllers中绘制segue而不是按钮或其他界面。

我遇到了同样的问题,只是从UIController而不是按钮更改segue的开头就删除了这个bug。

答案 3 :(得分:3)

当我将按钮直接连接到目标视图控制器时,我总是遇到此问题。您需要确保首先删除您制作的旧segue,然后单击当前视图控制器(您来自哪里)和CTRL +单击目标控制器。

这应该解决它:)