UINavigationBar只调用一些代理

时间:2013-01-19 19:02:20

标签: ios objective-c ios6 delegates

我在右侧添加了一个带有保存按钮的UINavigationItem,并在我的UINavigationBar左侧添加了一个后退按钮。我将视图控制器设置为委托,导航栏调用一些委托函数,但不是-(BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item

在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 个答案:

答案 0 :(得分:0)

Apple Documentation表示不允许您执行此委托。

  

此外,导航控制器对象会自动将其自身指定为其UINavigationBar对象的委托,并防止其他对象更改该关系。

一/该?做你想做的事就是把你自己的后退按钮放进去。 在该方法中,您进行测试并调用

[self.navigationController popViewControllerAnimated:true];

如果允许用户返回。