0

下面的 mwthod 是 UINavigationController 的委托方法。我想成为 abel 来决定是否将左侧项目添加到每个页面。下面的代码不起作用,我做错了吗?

我不想通过 ViewController 本身来执行此操作。我希望 NavigationCopntroller 负责这项任务。

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    UIBarButtonItem *menuItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemOrganize 
                                                                                  target:self 
                                                                                  action:@selector(menuItemSelected:)];
    [self.navigationItem setLeftBarButtonItem:menuItem];

    // I also tried 
    // [viewController.navigationItem setLeftBarButtonItem:menuItem];
}
4

2 回答 2

1

我认为问题在于您正在尝试访问navigationItemviewController 上的属性,但它不存在,因为在willShowViewController方法中 viewController 不在 navigationController 堆栈中,请尝试使用didShowViewController委托方法

像这样:

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    UIBarButtonItem *menuItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemOrganize 
                                                                                  target:self 
                                                                                  action:@selector(menuItemSelected:)];
    [self.navigationItem setLeftBarButtonItem:menuItem];

    [viewController.navigationItem setLeftBarButtonItem:menuItem]; 

}

于 2012-07-16T16:14:54.827 回答
1

控制台中有一条警告说“嵌套推送可能会损坏导航控制器”我将 2 个 Viewcontroller 推入堆栈,而不是一次推入 1 个 ViewController。

解决此问题并消除警告也解决了此问题。

于 2012-07-16T16:48:53.563 回答