0

次の mwthod は、UINavigationController のデリゲート メソッドです。左の項目を各ページに追加するかどうかを決定できるようになりたいです。以下のコードが機能しません。何か間違っていますか?

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

コンソールに、「ネストされたプッシュによってnavigationControllerが破損する可能性がある」という警告がありました。一度に1つのviewControllerをプッシュするのではなく、2つのViewcontrollerをスタックにプッシュしていました。

この問題を修正し、警告を取り除くと、この問題も修正されました。

于 2012-07-16T16:48:53.563 に答える
1

問題は、viewController のプロパティにアクセスしようとしているnavigationItemが、存在しないことだと思います。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 に答える