setNavigationBarHidden: НЕТ Не работает после removeFromSuperview - PullRequest
4 голосов
/ 15 мая 2011

Я добавляю подпредставление UIWebView поверх моего детализированного контроллера, который имеет панель навигации. Я хотел бы скрыть панель навигации в подпредставлении WebView и снова открыть ее при удалении из суперпредставления, чтобы при просмотре WebView было больше места на экране.

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

Любая помощь будет высоко ценится. Спасибо.

Это мой код:

// In InstrumentsDetailViewController.m

- (IBAction)edu1Link:(id)sender {

    _webViewController = [[WebViewController alloc]
                          initWithNibName:@"WebViewController" bundle:nil];

    [UIView beginAnimations:@"flipping view" context:nil];
    [UIView setAnimationDuration:1];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft
                           forView:self.view cache:YES];

    [self.view addSubview:_webViewController.view];

    [self.navigationController setNavigationBarHidden:YES animated:YES];

    [UIView commitAnimations];
}


// In WebViewController.m

- (IBAction) doneButton:(id)sender {

    [UIView beginAnimations:@"flipping view" context:nil];
    [UIView setAnimationDuration:1];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight
                           forView:self.view.superview cache:YES];

    [self.view removeFromSuperview];

    [self.navigationController setNavigationBarHidden:NO animated:YES];

    [UIView commitAnimations];
}

1 Ответ

1 голос
/ 30 октября 2012

Для того, что я вижу в коде: - вы добавляете подпредставление к основному виду вашего экземпляра InstrumentsDetailViewController. - Подвид является основным видом экземпляра WebViewController.

Но ... WebViewController никогда не помещается в ваш стек навигации. По этой причине ваш экземпляр WebViewController не имеет ссылки на ваш navigationController, и вызов [self.navigationController] отправит ваше сообщение setNavigationBarHidden: NO animated: YES на ... nil

Вы можете: - вставьте / вставьте экземпляр WebviewController в стек навигации, чтобы он имел ссылку на navigationController. или же - добавьте свой экземпляр WebViewController в качестве РЕБЕНКА InstrumentsDetailViewController и затем вызовите

[[[self parentViewController] navigationController] setNavigationBarHidden:NO animated:YES];

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html

поиск addChildViewController:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...