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 に答える