2011-11-04 97 views
0

我在app delegate方法的'navigationController willShowViewController'方法中设置了我的后退按钮。它被添加为显示中的viewcontroller的左栏按钮,如下面的代码所示。如何覆盖navigationItem.leftBarButtonItem

- (void)navigationController:(UINavigationController *)navigationController 
    willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 

     if (viewController != [navigationController.viewControllers objectAtIndex:0]) { 
      CustomNavButton *customBackButton = [[CustomNavButton alloc]initWithBackButtonAndFrame:CGRectMake(0, 0, 52, 33)]; 

      customBackButton.navcon = navigationController; 

      UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc]initWithCustomView:customBackButton]; 
      viewController.navigationItem.leftBarButtonItem = newBackButton; 
      [newBackButton release]; 

      viewController.navigationItem.hidesBackButton = YES; 
     } 


} 

我试图覆盖另一个视图控制器中的左栏按钮,如下所示。但无济于事。

CustomNavButton *feedButton = [[CustomNavButton alloc]initWithTitle:@"Feed" andFrame:CGRectMake(0, 0, 50, 32)]; 
[feedButton.customNavButton addTarget:self action:@selector(showFeedPage) forControlEvents:UIControlEventTouchUpInside]; 

UIBarButtonItem *leftFeedButton = [[UIBarButtonItem alloc]initWithCustomView:feedButton]; 

qavc.navigationItem.leftBarButtonItem = leftFeedButton; 

这似乎是的appdelegate方法总是在我的ViewController的代码,因此任何的变化在我的ViewController左边栏按钮将通过在应用程序的委托定义的后退按钮被替换后运行。

反正有这个吗?

回答

1

这是我在我的应用程序做,它工作得很好:

- (void)addBackAndSave { 
    [self.navigationItem setHidesBackButton:YES]; 

    UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(doSaveAlert:)]; 
    [self.navigationItem setLeftBarButtonItem:backItem]; 
    [backItem release]; 

    UIBarButtonItem *saveItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(saveData:)]; 
    [self.navigationItem setRightBarButtonItem:saveItem animated:YES]; 
    [saveItem release]; 
}