2016-11-04 3 views
0

Я хочу установить название свойство текущего navigationItem.backBarItem не относится к названию предыдущего вида. Поэтому я использую этот метод:Что не так с моим навигатором?

self.navigationController.navigationBar.topItem.backBarButtonItem=barButtonItem; 

Но я обнаружил, что это не действует, как я ожидаю в некоторой ситуации.

ИСПОЛЬЗОВАНИЕ TOPITEM В VIEW B

enter image description here

ИСПОЛЬЗОВАНИЕ BACKITEM В VIEW B

enter image description here

И я обнаружил, что self.navigationController.navigationBar.items (я думаю, что это стопка UINavigationItems) кажется неправильным.

С точки зрения А, поставленный self.navigationController.navigationBarHidden=YES; в viewDidLoad или viewWillAppear: также приводит к по-разному.

Так что же случилось с моим кодом? Должен ли я явный доступ к self.navigationItem, чтобы принудительно его инициализировать (событие я не использую его напрямую)?

КОД: спасибо за ваше терпение

VIEW A:

-(void)viewWillAppear:(BOOL)animated{ 
    self.navigationController.navigationBarHidden=YES; 
} 

VIEW B:

-(void)viewWillAppear:(BOOL)animated{ 
    [email protected]"B"; 
    self.navigationController.navigationBarHidden=NO; 
    UIBarButtonItem* buttonItem=[[UIBarButtonItem alloc] 
           initWithTitle:@"toA" 
           style:UIBarButtonItemStylePlain 
           target:self 
           action:nil]; 
    self.navigationController.navigationBar.topItem.backBarButtonItem=buttonItem; 
} 

VIEW C:

-(void)viewWillAppear:(BOOL)animated{ 
    [email protected]"C"; 
    self.navigationController.navigationBarHidden=NO; 
    UIBarButtonItem* buttonItem=[[UIBarButtonItem alloc] 
           initWithTitle:@"toB" 
           style:UIBarButtonItemStylePlain 
           target:self 
           action:nil]; 
    self.navigationController.navigationBar.topItem.backBarButtonItem=buttonItem; 
} 

ответ

3

Если вы хотите установить BackButton использовать

self.navigationItem.backBarButtonItem=buttonItem; 

Если вы хотите установить заголовок использования BackButton leftbarbutton в viewwillAppear

[self.navigationItem setHidesBackButton:YES]; 

UIBarButtonItem *buttonItem=[[UIBarButtonItem alloc] 
           initWithTitle:@"toA" 
           style:UIBarButtonItemStylePlain 
           target:self 
           action:@selector(back)]; 
    self.navigationItem.leftBarButtonItem=buttonItem; 

обратное действие

-(void)back 
{  
[self.navigationController popViewControllerAnimated:YES]; 

} 

или вы можете попробовать эти

viewwillappear

-(void)viewWillAppear:(BOOL)animated 
{ 
    self.navigationController.navigationItem.hidesBackButton=YES; 
    UIBarButtonItem *buttonItem=[[UIBarButtonItem alloc] 
             initWithTitle:@"toA" 
             style:UIBarButtonItemStylePlain 
             target:self 
             action:@selector(back)]; 
      self.navigationItem.leftBarButtonItem=buttonItem; 
    } 


-(void)back 
     {  
     [self.navigationController popViewControllerAnimated:YES]; 

     } 
+0

Не правильно. 'self.navigationItem' установит _backBarButton_ of ** next ** view, а не текущий. Это означает, что с точки зрения B он будет отображать ** назад **, и в виду C он покажет ** toA **. Проверено. – Tepmnthar

+0

Спасибо. Испытали отредактированную версию, тоже не работали ... Я что-то пропустил? – Tepmnthar

+0

В каждом представлении управления сначала вам нужно написать self.navigationController.navigationItem.hidesBackButton = YES; then –

 Смежные вопросы

  • Нет связанных вопросов^_^