我有一个表视图,其中包含不同类型的表视图单元格。在其中一个单元格中,有两个按钮,按下时加载视图控制器。我使用以下功能来处理按钮按下:
- (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上测试这个。我之前没有遇到这样的问题,我们将非常感谢任何帮助。
答案 0 :(得分:17)
也许你想用View Controllers而不是UIButtons连接你的segue!
您应该将segue连接到某个按钮,如下所示:
但您应该使用视图控制器连接它们:
答案 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 +单击目标控制器。
这应该解决它:)