2016-11-11 3 views
2

アンドロイドは、ユーザーがの場合、 2 メインページ。両方のページは、両方のページに表示される2つのタブボタンでナビゲートできます。しかし、他のページの通常のスタックページの振る舞いを維持したいIonic 2キャンセルハード戻るボタンのオーバーライド - >ユーザーがメインのタブページのいずれかにいるときに戻るボタンのアプリケーションを閉じるには

私は約registerBackButtonActionを読んで、このthread concerning Ionic 1の情報も得ました。

私は、アプリを閉じるためにカスタム動作を作成:

private registerSpecificActionOnBackButton =() => { 
    if(this.platform.is('android')||this.platform.is('windows')){ 
    this.platform.registerBackButtonAction(function(e){ 
     this.platform.exitApp(); 
    }.bind(this),101); 
    } 
} 

私の考えは、この動作が必要なページにionViewWillEnter()機能でregisterSpecificActionOnBackButton()関数を呼び出すことです。

しかし、私はdeRegisterSpecificActionOnBackButton()機能付きionViewWillLeave()機能でその動作をキャンセルするために管理していないが、私は他のものの間で試してみた:

private deRegisterSpecificActionOnBackButton =() => { 
    if(this.platform.is('android')||this.platform.is('windows')){ 
    this.platform.registerBackButtonAction(function(e){return true},101); 
    } 
} 

それとも

private deRegisterSpecificActionOnBackButton =() => { 
    if(this.platform.is('android')||this.platform.is('windows')){ 
    this.platform.registerBackButtonAction(function(event){event.unbind()},101); 
    } 
} 

しかし、私を立ち往生した。 のカスタムレジスタをキャンセルする人は誰ですか?BackButtonAction

答えて

0

私は期待どおりこの仕事をすることができました:タブメニューからアクセスできるページの1つにアプリがあると、戻るボタンがヒットしたときに閉じます(Androidの場合)。

まず理由は、this thread of 2016-08-05に説明されているものを引用として一瞬registerBackButtonAction()忘れる:

それはは、デフォルトのバックボタンの動作を上書きしようとしていないSを示唆して

他の解決策を探しました。私は本当にきれいではないが動作するものを見つけました。

まず、remove(startIndex, removeCount, opts)を使用してNavControlerでスタックをリセットできるかどうか確認しました。しかし、2つのメインページが(thereのように)タブページに埋め込まれているので、これはうまくいかない。

これらのページのいずれかにいる場合、NavControllerTabで、parentTabsです。

Tabsには、_selectHistoryという名前の配列変数があります。 _selectHistoryの配列には、スタックと同様の役割があるようです。したがって、2つのタブボタンを使用して1つのページから別のページにナビゲートする場合、console.info(this.[NavControler var of the page].parent._selectHistory)に、タブボタンが交互にヒットするとアレイが大きくなることがわかります。そして、実際のデバイスを試してみると、戻るボタンは配列が空になるまで次のページに切り替わります。そして、次の戻るボタンでアプリケーションを閉じます。

私は考えました:私はその配列の値を無効にすればどうなるか見てみましょう。 NavControllerとは異なり、Tabsオブジェクトに適用する関数ではできません。

だからタブページに埋め込まれた私のページに関連するページでは、私が)(ionViewWillEnterに次を追加しました:

ionViewWillEnter(){ 
    this.navCtrl.parent._selectHistory=[]; 
} 

This.navCtrlは、ページのコンストラクタに渡された私からNavControllerオブジェクトです。

これだけです。

関連する問題