2

Я не уверен, что я здесь отсутствует. У меня есть обычай UINavigationController, и я пытаюсь добавить стойку UIBarButtonItem к бару.Добавление UIBarButtonItem в UINav..Controller

 
-(void)viewDidLoad 
{ 
    self.navigationBar.barStyle = UIBarStyleBlack; 
    UIBarButtonItem *bbi = [[UIBarButtonItem alloc] initWithTitle:@"Nope..." 
       style:UIBarButtonItemStyleBordered 
       target:self 
       action:@selector(goBack:)]; 
    self.navigationItem.leftBarButtonItem =bbi; 
    [bbi release]; 
} 
-(void)goBack:(id)sender 
{ 
    NSLog(@"go back now"); 
} 

что мне здесь не хватает? - Кстати, я не хочу/не буду использовать IB.

UPDATE: В настоящее время это ближайший я могу получить:

 
-(void)viewDidLoad 
{ 
    self.navigationBar.barStyle = UIBarStyleBlack; 
    UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 20, 320, 44)]; 
    navBar.barStyle = UIBarStyleBlack; 
    UINavigationItem *navItem = [[UINavigationItem alloc] initWithTitle:@"Currently Playing..."]; 
    [navBar pushNavigationItem:navItem animated:NO]; 
    UIBarButtonItem *editButton = [[UIBarButtonItem alloc] initWithTitle:@"Close" style:UIBarButtonItemStyleBordered target:self action:@selector(goBack:)]; 
    navItem.rightBarButtonItem = editButton; 

    [self.view addSubview:navBar]; 

    [editButton release]; 
    [navItem release]; 
    [navBar release]; 
    [super viewDidLoad]; 
} 

Это ужасно, я должен добавить весь Navbar к UINavigationController, который уже имеет Navbar .... если я пытаюсь использовать существующий, я получаю эту ошибку:

 
'NSInternalInconsistencyException', reason: 'Cannot call pushNavigationItem:animated: directly on a UINavigationBar managed by a controller.' 

.... действительно ???

+0

так что происходит? Вы видите свой UINavigationController, но у него нет настраиваемой кнопки? Вы положили перерыв в вышеупомянутом методе и вызвали его? Вы прошли через него, а не ссылки на объекты - ноль? Вы перешли метод, который вызывает этот метод, и вы можете увидеть, что панель навигации установлена ​​правильно? – stefanB

+0

Отладчик показывает, что он действительно есть, но фактический дисплей не имеет ничего. Для чего это стоит, бар черный, как заявлено. – mlecho

+0

Поместите свой верхний код в контроллер корневого представления, а не в свой UINavigationController. Кроме того, причиной вашей ошибки во втором случае является то, что вы не нажимаете навигационные строки, подобные этому. Когда вы используете навигационные контроллеры, вы нажимаете новые контроллеры представлений в стек навигационных контроллеров. Затем эти новые диспетчеры представлений настраивают свои навигационные элементы по мере необходимости. –

ответ

21

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

Настройка self.navigationItem на вашем контроллере навигации будет работать, если ваш контроллер сам будет перенаправлен в другой контроллер навигации.