Как назначить мой CustomNavigationBar для UINavigationController? - PullRequest
3 голосов
/ 19 июня 2011

Чтобы настроить аспект navigationBar моего UINavigationController, мне сказали подкласс UINavigationBar класса.

Мне нужно изменить высоту панели, поместив изображение вместо заголовка ... и т. Д. Я не могу сделать это, просто используя UINavigationBar свойства.

Теперь моя проблема в том, как назначить UINavigationController, мой CustomNavigationBar экземпляр? Я не могу использовать UINavigationController.navigationBar, потому что он доступен только для чтения.

Кажется, что единственный способ загрузить xib, но Apple не рекомендует использовать подклассы UINavigationController, поэтому я немного запутался.

1 Ответ

3 голосов
/ 19 июня 2011

В зависимости от того, насколько точно вы хотите использовать навигационную панель, вам может помочь следующее:

1) Изображение на панели, заменяющее текст заголовка.(self является UIViewController)

UIImageView *titleImg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image.png"]];
self.navigationItem.titleView = titleImg;
[titleImg release];

2) Полностью настраиваемая навигационная панель

Subview UIView (ИСПРАВЛЕНИЕ: UINavigationController) с кончиком, используя (например, портретную ориентацию iPhone) aизображение в качестве фона (может иметь градиент), а затем настраиваемые кнопки слева и справа, все подключено к соответствующим функциям респондента.До тех пор, пока вы добавляете это представление панели навигации в качестве подпредставления для каждого контроллера представления и т. Д. Каждый раз, когда новый стек помещается в стек, вы переопределяете стандартную панель навигации Apple.(не забудьте установить их скрытыми в делегате приложения)


Редактировать:

NavigationBar.h

@interface NavigationBar: UIViewController
{   
    IBOutlet UIImageView* navigationBarImgView; // remember to set these 4 IBOutlets as properties with (nonatomic, retain) and synthesize them.

    IBOutlet UILabel* controllerHeader;

    IBOutlet UIButton* rightButton;
    IBOutlet UIButton* leftButton;

    eController controller;

    int screenWidth;
}

NavigationBar.m

-(id)initNavigationBar: (NSString*)name bundle:(NSBundle*)bundle: (eController)controllerName: (int)inScreenWidth
{
    [super initWithNibName:name bundle:bundle];

    controller = controllerName;
    screenWidth = isScreenWidth;

    return self;
}

Вы можете видеть, что мой init здесь проходит только в нескольких вещах - enum, который был определен в моем делегате приложения, который содержит имена всех возможных контроллеров представления.Мы интерпретируем это перечисление в моем собственном классе панели навигации и переключаемся между всеми возможными контроллерами, а затем настраиваем их кнопки и заголовки и действия, которые запускаются с использованием этой информации.Ширина экрана важна - хотя она может вам не понадобиться, если вы создаете панель в IB, установите ее размер, чтобы заполнить выделенное пространство для обеих ориентаций.

Держите меня в курсе:)

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