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 をターゲットにしています。