嵌套推送动画可能导致导航栏多次警告损坏

时间:2012-08-05 00:39:51

标签: ios xcode uinavigationcontroller

我是ios应用程序开发的新手,我遇到了多次警告的麻烦。

我有一个加载表视图的导航控制器。 从该表视图中,对单元格的触摸会推动新的VC(基本上是单元格的细节)。 在那个“detailView”上,当按下某个按钮时,会推送另一个VC。

我使用以下代码推送最后一个VC:

- (IBAction)toMoreDetail:(id)sender 
{
    [self performSegueWithIdentifier:@"toMoreDetail" sender:self];
}

当我这样做时,会弹出2个警告:

2012-08-05 02:25:41.842 appName[2145:f803] nested push animation can result in corrupted navigation bar
2012-08-05 02:25:42.197 appName[2145:f803] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.

到目前为止我没有找到任何好的答案。 也许任何人都可以帮我解决这个问题。

谢谢:)

编辑:这是另一个segue的代码:

从TableList到VC的详细信息(segue从原型单元开始,然后转到详细的vc):

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"toDetailEvent"])
    {
        NSInteger selectedIndex = [[self.tableView indexPathForSelectedRow] row];
        DetailEvent* detailEvent = [segue destinationViewController];
        detailEvent.eventToDisplay = [listEvents objectAtIndex:selectedIndex];
    }
} 

2 个答案:

答案 0 :(得分:17)

我的猜测是你的按钮与segue相关联,所以当你在它上面添加一个IBAction时,你会触发两次segue。

如果您转到故事板并单击segue,您应该能够看到其来源和目的地。它的起源是整个视图控制器还是只是按钮?如果原点是整个视图控制器,则只需手动performSegue。您可以尝试注释掉[self performSegueWithIdentifier:@"toMoreDetail" sender:self];内容,看看它是否有用吗?

答案 1 :(得分:1)

看起来如果你使用故事板并将你的segue从源vc连接到目标vc并使用didSelectRow调用segue,你就不能为segue选择留下else语句: 这有效:

if ((indexPath.row == 0 && indexPath.section == 0)) {
    [self performSegueWithIdentifier:@"simpleLines" sender:self];
}
if ((indexPath.row == 0 && indexPath.section == 5)) {
    [self openAppStore];
}
if (indexPath.section == 4)  {
    [self performSegueWithIdentifier:@"pushSettingsVC" sender:self];
}

这不起作用:

if ((indexPath.row == 0 && indexPath.section == 0)) {
    [self performSegueWithIdentifier:@"simpleLines" sender:self];
}
if ((indexPath.row == 0 && indexPath.section == 5)) {
    [self openAppStore];
}
else  {
    [self performSegueWithIdentifier:@"pushSettingsVC" sender:self];
}

使用导航控制器时会出现奇怪的双重推动。我每次开始一个项目时都会这样做,并且总是忘记它为什么会发生。下次我