【问题标题】:iOS segue executed twiceiOS segue 执行了两次
【发布时间】:2013-12-12 10:14:07
【问题描述】:

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

- (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 上对此进行测试。我以前没有遇到过这样的问题,非常感谢任何帮助。

【问题讨论】:

  • 您确定您已在界面生成器中正确连接操作吗?也许您已经将事件连接起来,例如,既可以触及内部,也可以触及内部,而不是仅仅触及内部。或者,也许您还从两个代码中分配了 segue,并在界面生成器中再次分配。你检查过吗?这是一个常见的错误。
  • 哦该死的..你说得对,我也在表格视图数据源方法中分配了我的按钮..谢谢你的回答!

标签: ios iphone objective-c ios7 segue


【解决方案1】:

也许你想用视图控制器而不是 UIButton 来连接你的 segues!

您可能应该将 segues 与一些按钮连接起来,如下所示:

但您应该将它们与视图控制器连接起来:

【讨论】:

  • 这对我有用! (斯威夫特 4,Xcode 9)。不知道为什么不强调这一点!使用委托,如果 segue 连接在按钮之间(在表格单元格中),它总是会触发,然后我的委托将被执行。连接到单元格视图,这不会发生,所以我手动调用 segue 按计划工作。
【解决方案2】:

can poyrazoğlu的回答:

你确定你在界面中正确连接了动作吗 建设者?也许你已经把事件联系起来了,比如说,两者都在里面修饰 并触及内部,而不是仅仅触及内部。或者你可能已经 还从两个代码中分配了segue,并在界面生成器中再次分配。 你检查过吗?这是一个常见的错误。 ——

我正在为情节提要和我的 tableview 的数据源方法的每个按钮分配内部操作。

感谢您的快速帮助可以 poyrazoğlu!!

【讨论】:

  • 哦,我并没有真正考虑表格视图,但很高兴看到它有所帮助。不客气:)
  • 我也在加载新的视图控制器 2x。我从视图控制器而不是 tableview 单元连接了 segue,这解决了问题。
【解决方案3】:

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

我遇到了同样的问题,只需从 UIController 更改 segue 的开始而不是按钮即可消除此错误。

【讨论】:

    【解决方案4】:

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

    这应该可以解决它:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      相关资源
      最近更新 更多