Начиная с 2012 года, как лучше всего реализовать пользовательский стиль панели навигации в iOS 4 - PullRequest
0 голосов
/ 12 января 2012

Я знаю два метода, и у каждого есть свои недостатки:

Ребята, вы знаете какой-нибудь лучший метод? (Опять же, это для iOS 4.0, так как мне нужно, чтобы приложение было совместимо с iOS 4.0 +)

Спасибо, ребята,

Ответы [ 2 ]

3 голосов
/ 12 января 2012

Возможно, вам нужны два метода, обусловленные версией ОС.Это связано с тем, что в версии 5.0 и более поздних функция drawRect не вызывается.Вместо этого 5.0 имеет свои собственные подпрограммы для пользовательской панели навигации.В итоге я использовал методы как 4.0, так и 5.0, определил версию и выбрал правильную во время выполнения.

Что касается первого метода, я не понимаю, зачем вам действительно нужен конструктор интерфейса.Просто создайте экземпляры ваших объектов программно и добавьте их как подпредставления.Сам по себе конструктор интерфейсов не делает ничего больше - это просто более удобный способ работы с ними.

1 голос
/ 28 января 2012

На самом деле нет необходимости перебирать методы, добавлять категории или использовать Interface Builder, вместо этого вы можете создать подкласс UINavigationBar и использовать NSKeyedUnarchiver, чтобы изменить класс UINavigationController.navigationBar на ваш собственный подкласс.

+ (UINavigationController*)customizableNavigationControllerWithController:(UIViewController*)controller {

NSAssert(controller != nil, @"UINavigationController(CustomNavigationBar) customizableControllerWithController: controller can not be nil");

UINavigationController *navController = [[[UINavigationController alloc] initWithRootViewController:nil] autorelease];

NSData *navControllerData = [NSKeyedArchiver archivedDataWithRootObject:navController];

NSKeyedUnarchiver *unarchiver = [[[NSKeyedUnarchiver alloc] initForReadingWithData:navControllerData] autorelease];

[unarchiver setClass:[CustomNavigationBar class] forClassName:@"UINavigationBar"];

UINavigationController *customizableNavController = [unarchiver decodeObjectForKey:@"root"];

customizableNavController.viewControllers = [NSArray arrayWithObject:controller];

return customizableNavController;

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...