2013-01-19 54 views
1

我加入了保存按鈕,右側和背部按鈕左側一個UINavigationItemUINavigationBar。我將我的視圖控制器設置爲委託,並且導航欄正在調用一些委託功能,但不是-(BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)itemUINavigationBar的只有調用一些代表

在ISStudioReviewViewController.h:

@interface ISStudioReviewViewController : UIViewController <UINavigationBarDelegate, UITextViewDelegate> 
    @property (weak, nonatomic) IBOutlet UINavigationBar *header; 
@end 

在ISStudioReviewViewController.m:

-(void)viewDidLoad { 
    [super viewDidLoad]; 
    ... 
    ... 
    UINavigationItem *navHeader = [[UINavigationItem alloc] initWithTitle:@"Compose Review"]; 
    [navHeader setHidesBackButton:NO]; 
    UIBarButtonItem *actionButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave 
                       target:self 
                       action:@selector(saveReview)]; 
    [navHeader setRightBarButtonItem:actionButton]; 
    [header setDelegate:self]; 
    [header pushNavigationItem:navHeader animated:NO]; 
} 

-(BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item 
{ 
    NSLog(@"Popping item"); 
    .... 
    return YES; 
} 
-(BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPushItem:(UINavigationItem *)item 
{ 
    NSLog(@"Should push item"); 
    return YES; 
} 
-(void)navigationBar:(UINavigationBar *)navigationBar didPushItem:(UINavigationItem *)item 
{ 
    NSLog(@"Pushing item!"); 
} 

在我的日誌,我可以看到shouldPush和didPush委託方法被正確調用,我的背扣正在顯示。但是,單擊後退按鈕不會調用委託方法,並且從不記錄Popping item

我應該注意的保存按鈕actionButton不正確地調用它的目標沒有問題。我曾嘗試不添加此按鈕,並且看看是否以某種方式導致後退按鈕失敗,但沒有運氣。

我使用ARC和定位的iOS 6.0。

+1

我複製你的代碼到一個新的應用程序,它爲我工作得很好 - 我的確得到了「啪項目」記錄,當我點擊後退按鈕。 – rdelmar

回答

0

,你不允許這樣做委託的Apple Documentation狀態。

此外,導航控制器對象自動將其自身指定爲其UINavigationBar對象的委託並阻止其他對象更改該關係。

一/的?做你想做的事情的方法是放入你自己的後退按鈕。 在該方法中,你做你的測試,並呼籲

[self.navigationController popViewControllerAnimated:true]; 

如果用戶被允許回去。