单击导航栏中的“返回”按钮时如何设置自定义视图控制器?

Posted

技术标签:

【中文标题】单击导航栏中的“返回”按钮时如何设置自定义视图控制器?【英文标题】:How to set a custom View Controller when clicking a "Back" button in Navigation Bar? 【发布时间】:2014-01-03 05:41:42 【问题描述】:

我有两个 Table View Controller,它们通过 Storyboard 中的“segues”相互连接。然后我剪掉了“segues”并插入了另一个控制器。现在连接不是通过“segues”。要连接我正在使用代码的视图:

UIStoryboard *storyboard = self.storyboard;
OptionsViewController *options = [storyboard instantiateViewControllerWithIdentifier:@"OptionsViewController"]
[self.navigationController pushViewController:options animated:YES];

现在,当我单击导航栏中的“返回”按钮时,我的程序崩溃了。如何解决?

控制台显示(视图加载后,在我按下“返回”按钮之前。):“嵌套推送动画可能导致导航栏损坏” “在意外状态下完成导航转换。导航栏子视图树可能已损坏。”

按下“返回”按钮后:“以未捕获的 NSException 类型异常终止”

Navigation Controller 是我故事板中的初始控制器,但 Views 没有相互连接。

已修复:我刚刚在代码末尾设置了“动画:否”。

【问题讨论】:

optionsViewController 是什么? 当您的应用程序崩溃时您在控制台中得到什么?有什么错误吗?? 我认为你的问题是 uinavigationcontroller 正在被释放。 将视图控制器设为保留/强属性 您可能已通过将动画设置为 NO 来修复崩溃,但您收到“嵌套推送动画可能导致导航栏损坏”消息的事实意味着您在转换中做错了 - - 通常该错误意味着您正在尝试一次进行 2 次转换。 【参考方案1】:

检查在viewDidAppear 之前调用pushViewController 是不安全的。所以你应该根据那个来创建你的代码。

【讨论】:

【参考方案2】:

尝试将行修改为

[self.navigationController pushViewController:options animated:YES];

更新

如果您不关心正常的后退按钮,请尝试以下代码。

- (void) viewDidLoad

// ADD BELOW CODE IN viewDidLoad ALONG WITH REST OF YOUR CODE
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@”back”
style:UIBarButtonItemStyleBordered target:self action:@selector(backBarButton:)];

self.navigationItem.leftBarButtonItem = backButton;


- (void) backBarButton:(id)sender

[self.navigationController popViewControllerAnimated:YES];

您可以使用样式来设置所需的按钮样式。

【讨论】:

其实我的代码是一样的。我只是在打字时犯了一个错误。

以上是关于单击导航栏中的“返回”按钮时如何设置自定义视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章

自定义底部栏过渡到 Swift 中的另一个视图?

有人知道如何从导航栏中删除不需要的动画吗?截图

单击搜索栏时如何导航到另一个视图控制器

单击自定义 TableViewCell Swift 4 中的按钮时如何呈现单独的视图控制器?

弹出视图时不恢复自定义导航栏背景

导航控制器中不显示后退按钮