2009-06-05 2 views
2

У меня есть навигационный контроллер и в нем контроллере вида:UINavigationBar названия и правая кнопка

-NavigationController1 
--MyViewController 

А так же у меня есть еще один навигационный контроллер - NavigationController2. Я хочу вызвать MyViewController с другого контроллера представления - ViewController2, который был нажат в NavigationController2. -NavigationController2 --ViewController2

Я делаю это следующим образом:

@implementation ModifyDicVController 

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    self.navigationItem.rightBarButtonItem = [ [ [UIBarButtonItem alloc] 
        initWithBarButtonSystemItem: 
        UIBarButtonSystemItemAdd target:self 
        action:@selector(add_clicked)] autorelease]; 

} 


-(void) add_clicked 
{ 
    [navigationController pushViewController: addWordsVController animated: YES]; 
} 

@end 

А вот метод viewWillAppear из MyViewController (тот, который в настоящее время называется):

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    [self setTitle: @"My title"]; 
} 

Я добавляю кнопку «done» на панель навигации, когда пользователь начинает редактировать текстовое поле:

- (void) textFieldDidBeginEditing: (UITextField *) textField 
{ 
    self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] 
       initWithTitle: NSLocalizedString(@"button: done", @"") 
       style:UIBarButtonItemStyleDone 
       target:self 
       action:@selector(doneEditing)] 
       autorelease]; 
} 

Проблема: если я вызываю MyViewController из ViewController2, который был перенесен в NavigationController2, и после этого я вызываю MyViewController из своего собственного NavigationController1, заголовок навигационной панели и сделанная кнопка не добавляются. Однако вызываются методы viewWillAppear и textFieldDidBeginEditing MyViewController.

В чем проблема и как ее исправить?

Спасибо.

+0

Можете ли вы более подробно описать иерархию навигационных контроллеров? –

+0

Это приложение похоже на адресную книгу. У меня есть панель вкладок, из которой я могу выбрать адресную книгу для редактирования (у меня есть несколько книг), а также я могу выбрать вкладку, откуда я могу добавить новый контакт в активную адресную книгу. Обе вкладки являются навигационными контроллерами. А также можно добавить новый контакт в адресную книгу, перейдя на первую вкладку, выберите конкретную адресную книгу для редактирования и оттуда добавьте новые контакты. –

ответ

1

Ваш вопрос немного запутанный.

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

Если это так, настоящая проблема заключается в том, что контроллеры вашего представления НЕ должны общаться друг с другом. Вместо этого они должны сохранять состояние в модели.

Если вы сделаете это, у вас не будет проблем. Подумайте о том, чтобы иметь модельный синглтон для сохранения информации, которая теряется.

Если я неправильно понял вашу проблему, сообщите мне.

0

Чтобы изменить использование заголовка в контроллере представления, который в настоящее время находится поверх стека (активный).

[email protected]"the title"; 
Смежные вопросы