1. ホーム
  2. ios

iOSでナビゲーションボタンの "戻る "アクションを処理しようとしています。

2023-09-15 07:39:08

質問

私は、ユーザーがナビゲーションバーの "back" ボタンをタップしたときに、それが発生したときにいくつかの操作を実行するために、それを検出する必要があります。私は、この方法で、そのようなボタンに手動でアクションを設定しようとしています。

[self.navigationItem.backBarButtonItem setAction:@selector(performBackNavigation:)];

- (void)performBackNavigation:(id)sender
{
   // Do operations

   [self.navigationController popViewControllerAnimated:NO];
}

最初はビューコントローラ自体にそのコードを配置したのですが、その際に self.navigationItem.backBarButtonItem のように思えました。 nil になっているようなので、同じコードを親のビューコントローラに移動して、前者をナビゲーションスタックにプッシュするようにしました。しかし、私はそれを動作させることができません。私はこの問題に関するいくつかの記事を読んで、それらのいくつかは、セレクタが親ビューコントローラに設定される必要があると述べたが、私のためにそれはとにかく動作しません...。私は何が間違っている可能性がありますか?

ありがとうございます。

どのように解決するのですか?

以下のコードを使ってみてください。 VIewWillDisappear メソッドを使用して、NavigationItemの戻るボタンが押されたことを検出するコードを試してみてください。

-(void) viewWillDisappear:(BOOL)animated
{
    if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound) 
    {
        // Navigation button was pressed. Do some stuff 
        [self.navigationController popViewControllerAnimated:NO];
    }
    [super viewWillDisappear:animated];
}

または、ナビゲーションバックボタンのアクションを取得する別の方法があります。

戻るボタンのUINavigationItemのカスタムボタンを作成します。

例:

ViewDidLoadで:

- (void)viewDidLoad 
{
    [super viewDidLoad];
    UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Home" style:UIBarButtonItemStyleBordered target:self action:@selector(home:)];
    self.navigationItem.leftBarButtonItem=newBackButton;
}

-(void)home:(UIBarButtonItem *)sender 
{
    [self.navigationController popToRootViewControllerAnimated:YES];
}

スウィフト:

override func willMoveToParentViewController(parent: UIViewController?) 
{
    if parent == nil 
    {
        // Back btn Event handler
    }
}