В качестве дополнительной мысли мне удалось создать полностью настроенную панель навигации, переопределив drawRect:
, чтобы она отображала фоновое изображение. Оттуда стало легко устанавливать свойства leftBarButtonItem
, rightBarButtonItem
и titleView
свойства navigationItem
моего контроллера навигации для получения пользовательских кнопок и заголовков. Это работает со встроенным контроллером навигации / панелью навигации / логикой элемента навигации, поэтому нет риска скрытия или затенения объектов (например, кнопок панели).
В категории UINavigationBar
:
- ( void )drawRect:( CGRect )rect
{
[ [ UIImage imageNamed:@"background-image.png" ] drawInRect:CGRectMake( 0, 0,
self.frame.size.width, self.frame.size.height ) ];
}
Прямо перед вызовом pushViewController:animated:
сделайте что-то вроде этого:
UIButton * leftButton = [ UIButton buttonWithType:UIButtonTypeCustom ];
leftButton.frame = CGRectMake( 0.0, 0.0, 65.0, 32.0 );
[ leftButton setImage:[ UIImage imageNamed:@"left.png" ] forState:UIControlStateNormal ];
[ leftButton addTarget:self action:@selector( leftAction ) forControlEvents:UIControlEventTouchUpInside ];
UIButton * rightButton = [ UIButton buttonWithType:UIButtonTypeCustom ];
rightButton.frame = CGRectMake( 0.0, 0.0, 65.0, 32.0 );
[ rightButton setImage:[ UIImage imageNamed:@"right.png" ] forState:UIControlStateNormal ];
[ rightButton addTarget:self action:@selector( rightAction ) forControlEvents:UIControlEventTouchUpInside ];
UIImageView * titleView = [ [ UIImageView alloc ] initWithImage:[ UIImage imageNamed:@"title.png" ] ];
UIBarButtonItem * leftBarButtonItem = [ [ UIBarButtonItem alloc ] initWithCustomView :leftButton ];
UIBarButtonItem * rightBarButtonItem = [ [ UIBarButtonItem alloc ] initWithCustomView:rightButton ];
nextController.navigationItem.leftBarButtonItem = leftButtonItem;
nextController.navigationItem.rightBarButtonItem = rightButtonItem;
nextController.navigationItem.titleView = titleView;
Возможно, он немного занят, но вы можете абстрагировать весь этот код в метод (или его серию) где-то еще. Этот подход имеет тенденцию работать хорошо, если вы хотите полностью переопределить любой из стилей, которые появляются в вашей панели навигации.
Надеюсь, это поможет!