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