1

2 つの UIViewcontrollers があります。UINavigationController でそれらを vcA と vcB と呼びましょう。

vcB に、いくつかのコードをトリガーするカスタムの戻るボタンが必要です。目標は、カスタム アニメーションを実行することです。

vcA に次のコードを追加しました。

UIViewController *vcB = [UIViewController alloc] init]

UIBarButtonItem *customBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" 
                                                                      style:UIBarButtonItemStyleBordered 
                                                                     target:self 
                                                                     action:@selector(handleBack)];
self.navigationItem.backBarButtonItem = custombackBackButton;

[self.navigationController pushViewController: vcB animated: YES];

次に、vcA と vcB の両方に次のコードを追加しました。

-(void) handleBack
{
  NSlog(@"Going back to vcA");
}

handleback メソッドが呼び出されることはありません。ヒントはありますか?

ありがとう

ニコラ

4

4 に答える 4

1

誤解しないでください。UINavigationController のプッシュ ポップについて明確にする必要があると思います。

ナビゲーション コントローラーは、ビューをコントローラーのビュー スタックにプッシュ/ポップすることでビューを管理します。アイテムを押すと、現在のビューが画面から左にスライドし、新しいビューが右からスライドします。もちろん、これらのアニメーションは、必要に応じて変更できます。

これは完全に必要なものだと思います。

これを、vcA から vcB をプッシュする vcA に配置します。

UIViewController *vcB = [UIViewController alloc] init];

[self.navigationController pushViewController: vcB animated: NO];

[UIView transitionWithView:self.navigationController.view
       duration:0.8
       options:UIViewAnimationOptionTransitionFlipFromRight
       animations:nil
       completion:nil];

vcB では、barbuttonitem を作成できます。

 UIBarButtonItem *addButton = [[[UIBarButtonItem alloc] initWithTitle:@"BackToVcA"
                                                               style:UIBarButtonItemStyleBordered
                                                              target:self
                                                              action:@selector(addAction:)] autorelease];
self.navigationItem.rightBarButtonItem = addButton;

addActionMethod: に、必要なアニメーションで戻るための以下のコードを配置できます

- (void)addAction:(id)sender
{
     UIViewController *vcA = [UIViewController alloc] init];

     [[self retain] autorelease];

     [self.navigationController pushViewController: vcA animated: NO];

     [UIView transitionWithView:self.navigationController.view duration:0.8 options:UIViewAnimationOptionTransitionFlipFromLeft animations:nil completion:nil];

     [self.navigationController popViewControllerAnimated:NO];

}
于 2013-03-14T10:04:08.137 に答える
1

William Jockusch のトリックを使用する戻るボタンのアクションを設定する

また、ナビゲーションバーの更新に従って

  • 新しい最上位ビュー コントローラーにカスタムの左バー ボタン項目がある場合、その項目が表示されます。カスタムの左バーボタン項目を指定するには、View Controller のナビゲーション項目のleftBarButtonItemプロパティを設定します。
  • 最上位ビュー コントローラーにカスタムの左バー ボタン項目がなく、前のビュー コントローラーのナビゲーション項目の backBarButtonItem プロパティに有効な項目がある場合、ナビゲーション バーにはその項目が表示されます。

したがって、カスタムセレクターが必要な場合は、これを vcB NOT IN vbA 内に記述する必要があります

vcB.m

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIBarButtonItem *customBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Back"
                                                                         style:UIBarButtonItemStyleBordered
                                                                        target:self
                                                                        action:@selector(handleBack)];
    self.navigationItem.backBarButtonItem = customBackButton;
}

-(void) handleBack
{
  NSlog(@"Going back to vcA");
}

ノート:

UINavigationController クラス リファレンス

このナビゲーション項目がスタック内の一番上の項目のすぐ下にある場合、ナビゲーション コントローラーは、このナビゲーション項目からナビゲーション バーの戻るボタンを派生させます。このプロパティが nil の場合、ナビゲーション項目は title プロパティの値を使用して適切な戻るボタンを作成します。戻るボタンのカスタム イメージまたはタイトルを指定する場合は、代わりにカスタム バー ボタン項目 (カスタム タイトルまたはイメージを含む) をこのプロパティに割り当てることができます。バー ボタン項目を構成するときは、カスタム ビューを割り当てないでください。いずれにせよ、ナビゲーション項目はバック バー ボタンのカスタム ビューを無視します。

戻るボタンのカスタム イメージまたはタイトルを指定する場合は、カスタム バー ボタン項目を (カスタム タイトルまたはイメージで) 割り当てることができますが、カスタム ビューは無視されます。したがって、セレクターは呼び出していません。

于 2013-03-14T09:02:01.310 に答える
0

backBarButtonItemsアクションを変更することはできません。デフォルト(戻る)アクションを実行します。leftBarButtonItemsでカスタム処理を実行する必要があります。

vcBsクラスにこれを追加します:

- (void)viewWillAppear:(BOOL)animated
{
    UIBarButtonItem *customBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Back"
                                                                         style:UIBarButtonItemStyleBordered
                                                                        target:self
                                                                        action:@selector(handleBack)];
    self.navigationItem.leftBarButtonItem = customBackButton;
}

- (void)handleBack
{
    NSLog(@"back");
}
于 2013-03-14T09:08:36.060 に答える
0

あなたの間違いです。最初に vcB にプッシュし、vcB viewDidLoadメソッドにこのコードを配置します。

UIBarButtonItem *customBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(handleBack)]; 
 self.navigationItem.backBarButtonItem = custombackBackButton;

また、これをvcBに入れます:

-(void) handleBack{
 NSlog(@"Going back to vcA");
}
于 2013-03-14T08:55:35.033 に答える