iOS:嵌套的推送动画会导致导航栏损坏

标签 ios ios7

我是 ios 的新手。我正在做一个项目,但遇到了这个错误。

基本上下面的代码是在单击一行时加载一个新的 xib,if 语句用于检查是否单击了特定的行。

if (#something) {
    UIViewController *controller = [[NSClassFromString(@"abcd") alloc] initWithNibName:@"abcd" bundle:nil];
    [self.navigationController pushViewController:controller animated:YES];
} else {
    methodsViewController.r = [sel objectForKey:@"cvb"];
    methodsViewController.m = [sel objectForKey:@"bnm"];
    #adding controller
    [self.navigationController pushViewController:controller animated:NO];
}

问题是,当我单击一行时,它会转到新页面,但是当我单击导航栏中的后退按钮时,不会加载上一页,而是显示黑页。它在日志中显示的错误是: 嵌套的推送动画可能会导致导航栏损坏。在意外状态下完成导航转换。导航栏 subview 树可能会损坏。

我搜索了所有类似的答案,但找不到解决方案。帮助将不胜感激。

提前致谢

最佳答案

您可能在 Storyboard 中有一个 Segue,它会在选择表格行时触发。当您在选择一行时也手动按下 Controller 时,会发生您描述的错误。您应该从 Storyboard 中删除 segue。

编辑:更多细节:

我假设您使用 Storyboard(设计窗口中有多个 View Controller )。如果您不使用它,那我就走错了路。例如,从我的一个项目中截取此屏幕截图:

Storyboard screenshot

如果您从“行”按住控制键拖动到右侧的 View Controller ,则您创建了一个转场。当您在左 View Controller 的 TableView 中选择一行时,很可能会触发此 segue。如果您使用的是标准项目,那么这样的转场可能已经存在,并且不是您自己创建的。

当您选择一行时,segue 会“自动”触发。当您在代码中手动推送 View Controller 时,您可能会导致“第二次推送”,从而扰乱导航 Controller 。

您可以通过单击场景之间的粗线或那个圆形图标并按删除键来删除转场。


如果您需要一个在选择行时不会自动触发的转场,您可以按住 Control 键将它从黄色图标拖到目标场景。应出现一个菜单,您可以选择“手动”下的选项之一。然后必须手动触发 segue,您可以在代码中执行以下操作:

[self performSegueWithIdentifier:@"SegueId" sender:self];

当您单击 Storyboard中的圆形 segue 图标时,您可以在属性检查器的实用程序窗口中的“标识符”字段中设置一个标识符。该标识符是上面代码行中使用的字符串。

关于iOS:嵌套的推送动画会导致导航栏损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23735623/

相关文章:

ios - 如何使用更新后的数据刷新 NSManagedObject - Core Data

ios - 是否有可能恢复你上次在 UIwebView Xcode 5 中的位置

html - iOS 6 和 iOS 7 中的 UIWebView 渲染差异

c++ - 编译期间未使用参数 : '-stdlib'

objective-c - CFURLRef 需要桥接转换错误

ios - 如何在 Moya 中添加参数?

ios - 有条件地编译 iOS 7 中 libxml2 的差异

ios - 自定义委托(delegate)没有响应

ios - xcodebuild 不启动 iOS 7.0 模拟器

objective-c - 当前位置权限对话框消失得太快