"[setToolBarHidden: YES]" не работает - PullRequest
1 голос
/ 28 октября 2011

У меня есть UINavigationController и в одном из его контроллеров представления я делаю панель инструментов не скрытой в viewDidAppear. Работает просто отлично. Но в viewDidDisappear я устанавливаю его как скрытый, но он не скрывается. Что я делаю неправильно? Вот соответствующий код:

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

    [[self navigationController] setToolbarHidden:NO];

    UIBarButtonItem *buttomSubmit = [[UIBarButtonItem alloc] initWithTitle:@"Submit" 
                                                                   style:UIBarButtonItemStyleBordered 
                                                                  target:self 
                                                                  action:@selector(done)];
    UIBarButtonItem *buttonPrint = [[UIBarButtonItem alloc] initWithTitle:@"Print" 
                                                                     style:UIBarButtonItemStyleBordered 
                                                                    target:self 
                                                                    action:@selector(done)];
    UIBarButtonItem *buttonUnits = [[UIBarButtonItem alloc] initWithTitle:@"Units" 
                                                                    style:UIBarButtonItemStyleBordered 
                                                                   target:self 
                                                                   action:@selector(done)];
    UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace 
                                                                               target:nil 
                                                                               action:nil];

    [self setToolbarItems:[NSArray arrayWithObjects:buttonUnits, flexSpace, buttomSubmit, buttonPrint, nil]];

    [buttomSubmit release];
    [buttonPrint release];
    [buttonUnits release];
    [flexSpace release];
}

- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
    [[self navigationController] setToolbarHidden:YES];
}

Спасибо! * * 1004

Ответы [ 2 ]

3 голосов
/ 28 октября 2011

viewDidDisappear вызывается после того, как представление исчезло с экрана.Если представление исчезло с экрана из-за нажатия кнопки «Назад», оно будет удалено из стека навигационного контроллера.

Из ссылки на класс * UIViewController примечания к свойству navigationController:

Возвращает контроллер навигации, только если контроллер представления находится в его стеке.Это свойство равно nil, если не удается найти контроллер навигации.

Это означает, что [self navigationController] возвращает ноль и, следовательно, сообщение setToolbarHidden отправляется на ноль и не имеет никакого эффекта.

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

0 голосов
/ 16 апреля 2015

Это нормально, чтобы скрыть это, прежде чем представление исчезнет с экрана.

-(void)viewWillDisappear:(BOOL)animated{
     [super viewWillDisappear:animated];
     [self.navigationController setToolbarHidden:YES animated:YES];
}
...