UINavigationBar заголовок и правая кнопка - PullRequest
2 голосов
/ 05 июня 2009

У меня есть контроллер навигации и в нем контроллер вида:

-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"];
}

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

- (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 вызываются.

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

Спасибо.

Ответы [ 2 ]

1 голос
/ 06 июня 2009

Ваш вопрос немного сбивает с толку.

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

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

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

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

0 голосов
/ 13 сентября 2011

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

self.navigationItem.title=@"the title";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...