0

Я пишу подкласс UINavigationBar и хочу интегрировать в него по умолчанию backButton.Пользовательская кнопка «Назад» в подклассе UINavigationBar

Из того, что я понял с документацией, мне нужно посмотреть, когда новый элемент добавлен в свойство item, и добавьте в него свою пользовательскую кнопку возврата.

Я сделал это в UINavigationBar подклассе:

- (void)pushNavigationItem:(UINavigationItem *)item animated:(BOOL)animated { 
    [super pushNavigationItem:item animated:animated]; 

    ActionButton *leftButtom = [[ActionButton alloc] init]; 
    leftButtom.cancel = NO; 

    [item setBackBarButtonItem:[[UIBarButtonItem alloc] initWithCustomView:leftButtom]]; 
} 

- (UINavigationItem *)popNavigationItemAnimated:(BOOL)animated { 
    return [super popNavigationItemAnimated:animated]; 
} 

Я не понимаю, почему, но popNavigationItemAnimated вызывается при нажатии кнопки назад, но pushNavigationItem не вызывается, когда я толкаю новый ViewController.

Я проверить с помощью отладчика и

po [[self.navigationController navigationBar] items]

печать правильно, что есть новый элемент в массиве.

Я что-то пропустил?

ответ

0

пожалуйста, попробуйте это, я думаю, что это может помочь

// image for my back button 

UIImage *backButtonImage= [UIImage imageNamed:@"Back.png"]; 
UIButton *leftBarButton = [UIButton buttonWithType: UIButtonTypeCustom]; 

// Setting the image for the back button 

[leftBarButton setBackgroundImage: backButtonImage forState:UIControlStateNormal]; 
[leftBarButton addTarget: self action:@selector(backToMenu:) forControlEvents:UIControlEventTouchUpInside]; 

// setting the frame for the back button 

leftBarButton.frame = CGRectMake(0, 0, 65, 32); 

// setting the custom button to navigationbars back button 

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView: leftBarButton]; 
+0

Вы даете мне код для ввода в UIViewController, я хочу достичь этого в моем подклассе UINavigationBar. Это заставит меня поместить этот код во весь мой UIViewController или сделать категорию для этого, и я не упаду, как это лучший способ достичь этого. – Loadex

0

UINavigationBar не несет ответственности за панель навигации. Я предполагаю, что вам нужен UINavigationController и добавьте элементы навигации в контроллеры просмотра, перемещенные в навигационный контроллер. Это обычный способ организовать навигационный стек.

+0

Спасибо за ваш ответ! Но UINavigationBar должен иметь возможность обрабатывать поведение, которое я хочу иметь, поскольку оно должно быть «уведомлено» о вызове, что новый элемент добавлен. Я просто не могу понять, почему метод не называется мышлением. – Loadex