我在右侧添加了一个带有保存按钮的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。
答案 0 :(得分:0)
Apple Documentation表示不允许您执行此委托。
此外,导航控制器对象会自动将其自身指定为其UINavigationBar对象的委托,并防止其他对象更改该关系。
一/该?做你想做的事就是把你自己的后退按钮放进去。 在该方法中,您进行测试并调用
[self.navigationController popViewControllerAnimated:true];
如果允许用户返回。