1

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。

4

1 回答 1

0

Apple 文档声明不允许您执行此委托。

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

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

[self.navigationController popViewControllerAnimated:true];

如果允许用户返回。

于 2013-08-05T11:35:32.737 回答