如果用户位于两个主页之一,我想让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 ?
答案 0 :(得分:0)
我已经设法按照我的预期完成了这项工作:当应用程序位于其中一个可以通过选项卡菜单访问的页面上时,它会在后退按钮被点击时关闭(在Android上)。 /强>
首先,暂时忘记registerBackButtonAction()
,因为引用了this thread of 2016-08-05中的解释:
建议 s 不要试图覆盖默认的后退按钮行为。
所以我寻找其他解决方案。我发现一个不是很干净但有效的。
首先,我查看是否可以使用NavControler
使用remove(startIndex, removeCount, opts)
重置堆栈。但这没有用,因为两个主要页面都嵌入了标签页(如there所示)。
因此,当您访问其中一个网页时,NavController
为Tab
,其parent
为Tabs
。
在Tabs
中有一个名为_selectHistory
的数组变量。 _selectHistory
数组似乎具有类似于堆栈的作用。因此,当使用两个选项卡按钮从一个页面导航到另一个页面时,可以在console.info(this.[NavControler var of the page].parent._selectHistory)
中看到阵列增长,因为选项卡按钮会被替换。在尝试使用真实设备时,后退按钮可以让您从一个页面切换到另一个页面,直到阵列为空,然后下一个后退按钮点击该应用程序。
因此我想:如果我覆盖该数组的值,请看看会发生什么。不能通过函数来应用Tabs
对象(与NavController
不同)。
所以在关于我在页面中嵌入的页面的页面中,我在ionViewWillEnter()中添加了以下内容:
ionViewWillEnter(){
this.navCtrl.parent._selectHistory=[];
}
This.navCtrl
是我在页面构造函数中传递的NavController对象。
就是这样。