Из-за странного запроса, который я попытался отклонить, но это не сработало, мне пришлось переопределить кнопку назад навигационной панели.
Я создал пользовательский подкласс 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
Все работает отлично, за исключением случаев, когда программным обеспечением popController. Приложение разбилось каждый раз, когда я хотел выполнить push после упомянутого pop. Повернув NSZombie on
, выяснилось, что при программном обращении к viewController его родительский viewController освобождается.
На данный момент создание пользовательского backButton не является вариантом, так как оно потеряет собственный iOS 7 для функции popViewController.
Журнал сбоев:
*** -[ContactsDetailViewController performSelector:withObject:withObject:]: message sent to deallocated instance 0x1806b790