Вы всегда должны вызывать [super awakeFromNib]
, когда ваш подкласс реализует этот метод, согласно документации для -awakeFromNib
:
Вы должны вызвать супер реализацию awakeFromNib, чтобы дать родительским классам возможностьвыполнить любую дополнительную инициализацию, которая им требуется
Важно, однако, что ...
Я не понимаю, почему вы фактически должны управлять своей собственной панелью навигации.Если вы создаете подкласс UINavigationBar
и переопределяете только определенные методы рисования или макета, такие как -drawRect:
, -layoutSubviews
и т. Д., Тогда вся логика управления панелью навигации в контроллере навигации просто вернется к исходному UINaviationBar
class.
Мне приходилось проводить обширную настройку вида почти для всех основных классов UIKit
, но я всегда оставлял сложную логику исходным классам, переопределяя только методы рисования, чтобы настроить внешний вид.
Между прочим, на самом деле гораздо проще создать обложку для всего приложения без создания подклассов, если все, что вы делаете, - это использование пользовательских графических ресурсов.Установив свойство contents
слоя, вы можете либо настроить внешний вид класса UIView
на основе требований, либо по всему вашему приложению:
#import <QuartzCore/QuartzCore.h>
...
- (void)viewDidLoad
{
[super viewDidLoad];
UIImage * navigationBarContents = [UIImage imageNamed:@"navigation-bar"];
self.navigationController.navigationBar.layer.contents =
(id)navigationBarContents.CGImage;
}
Вы можете установитьсодержимое для любого класса, который наследуется от UIView
: панели навигации, панели инструментов, кнопки и т. д. Управлять этим способом намного проще, не имея подклассов вообще.