Ionic 2取消硬BACK按钮覆盖 - >当用户在其中一个主要标签页上时关闭应用程序

时间:2016-11-11 00:52:25

标签: ionic2

如果用户位于两个主页之一,我想让Android 后退按钮关闭应用。可以使用两个选项卡按钮导航两个页面,这两个选项卡按钮显示在这两个页面上。但是在任何其他页面上我想保持正常的堆栈页行为

我阅读了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);
  }
}

我的想法是在需要此行为的网页上调用registerSpecificActionOnBackButton()函数中的ionViewWillEnter()函数。

但是我无法使用ionViewWillLeave()函数取消deRegisterSpecificActionOnBackButton() 函数上的行为,我已尝试过其他方法:

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);
  }
}

但我碰巧被卡住了。有没有人知道取消自定义registerBackButtonAction

1 个答案:

答案 0 :(得分:0)

我已经设法按照我的预期完成了这项工作:当应用程序位于其中一个可以通过选项卡菜单访问的页面上时,它会在后退按钮被点击时关闭(在Android上)。 /强>

首先,暂时忘记registerBackButtonAction(),因为引用了this thread of 2016-08-05中的解释:

  

建议 s 不要试图覆盖默认的后退按钮行为。

所以我寻找其他解决方案。我发现一个不是很干净但有效的。

首先,我查看是否可以使用NavControler使用remove(startIndex, removeCount, opts)重置堆栈。但这没有用,因为两个主要页面都嵌入了标签页(如there所示)。

因此,当您访问其中一个网页时,NavControllerTab,其parentTabs

Tabs中有一个名为_selectHistory的数组变量。 _selectHistory数组似乎具有类似于堆栈的作用。因此,当使用两个选项卡按钮从一个页面导航到另一个页面时,可以在console.info(this.[NavControler var of the page].parent._selectHistory)中看到阵列增长,因为选项卡按钮会被替换。在尝试使用真实设备时,后退按钮可以让您从一个页面切换到另一个页面,直到阵列为空,然后下一个后退按钮点击该应用程序。

因此我想:如果我覆盖该数组的值,请看看会发生什么。不能通过函数来​​应用Tabs对象(与NavController不同)。

所以在关于我在页面中嵌入的页面的页面中,我在ionViewWillEnter()中添加了以下内容:

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

This.navCtrl是我在页面构造函数中传递的NavController对象。

就是这样。