由于我试图拒绝但没有奏效的奇怪请求,我不得不覆盖导航栏的后退按钮。
我制作了一个自定义 UINavigationController 子类并破解了该
- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item
方法。
这是我的代码:
@interface CustomUINavigationController ()
@end
@implementation CustomUINavigationController
#pragma mark - UINavigationBar delegate methods
- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item {
if ([[self.viewControllers lastObject] isKindOfClass:[ViewController1 class]]) {
ViewController1 *vc1 = (ViewController1 *)[self.viewControllers lastObject];
[vc1 handleBackAction];
if (vc1.canPopVC == YES) {
[self popViewControllerAnimated:YES];
return YES;
} else {
return NO;
}
}
[self popViewControllerAnimated:YES];
return YES;
}
@end
一切正常,除非我以编程方式弹出 viewController。每次我想在弹出后执行推送时,应用程序都会崩溃。TurningNSZombie on
显示,当以编程方式弹出 viewController 时,它的父 viewController 被释放。此时,制作自定义 backButton 不是一个选项,因为它会失去原生 iOS 7 滑动到 popViewController 的功能。
崩溃日志:
*** -[ContactsDetailViewController performSelector:withObject:withObject:]: message sent to deallocated instance 0x1806b790