У меня тоже были проблемы с customView
на navigationItem.backBarButtonItem
. Я подозреваю, что это, вероятно, просто b0rked в SDK.
Хотя обходные пути, описанные здесь, работают, я нашел решение, которое немного более элегантно: оно все еще использует navigationItem.leftBarButtonItem
, но позаботится о нем автоматически (больше не нужно «детское» представление) контроллеры должны знать что-либо об их «родителе» и / или вручную устанавливать navigationItem.leftBarButtonItem
).
Прежде всего, пусть у какого-нибудь класса будет UINavigationControllerDelegate
для UINavigationController
, кнопка возврата которого вас интересует. Затем, в этом классе, установите что-то вроде следующего willShowViewController
метода делегата:
-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
// reference to view controller stack
NSArray *viewControllers = [ navigationController viewControllers ];
if( [ viewControllers count ] > 1 ){
// the view controller we'll be linking to
UIViewController *backViewController = [ viewControllers objectAtIndex: [ viewControllers count ] - 2 ];
// create custom UIBarButtonItem
UIBarButtonItem *leftButton = [[ UIBarButtonItem alloc ] initWithCustomView: someCustomView ];
// set it as the leftBarButtonItem on the incoming viewcontroller
viewController.navigationItem.leftBarButtonItem = leftButton;
// tidy up
[ leftButton release ];
}
}
У меня были некоторые дальнейшие проблемы с этим; кажется, что UIBarButtonItem.action
и UIBarButtonItem.target
не работают, когда это navigationItem.leftBarButtonItem
. Итак, у вас есть пользовательская кнопка «назад», которая на самом деле не возвращается. Я оставлю реагирование на прикосновения в вашем пользовательском представлении в качестве упражнения для читателя (я использовал UIButton), но вам нужно добавить этот метод в ваш класс делегатов:
-(void)onDummyBackButtonTapped{
[ someNavigationController popViewControllerAnimated: YES ];
}
и включите его, когда ваш пользовательский вид коснется.