在iOS平台上的NativeScript应用程序中,是否可以捕获和取消后退按钮事件?

时间:2019-04-09 13:58:03

标签: ios nativescript nativescript-angular

我正在为Android和iOS开发NativeScript-Angular应用,但是在标准后退按钮导航方面遇到了问题。我已经解决了Android的问题,但是找不到适用于iOS的解决方案。

该事件在返回预期路由数据的特定页面时引起问题,从而导致异常:

  

“错误:当前在页面上导航中-应该重新连接组件而不是激活它”。

我的Android解决方案捕获后退按钮事件并将其取消,然后调用路由器进行导航。


 ngOnInit() { 
     if (app.android) {
       app.android.on(app.AndroidApplication.activityBackPressedEvent, 
         (args: any) => this.backEvent(args));
     }
 }

 backEvent(args) {
   args.cancel = true; 
   this.backToRegister(false);
 }

 backToRegister(accepted: boolean){
   this.router.navigate(['/register', 
     this.registerParametersEntered.password, 
     this.registerParametersEntered.confirmPassword, 
     this.registerParametersEntered.code, 
     this.registerParametersEntered.email,
     accepted]);
 }

我想对iOS做类似的事情,例如:-

if (app.ios) {
  this.page.on('navigatingFrom', (data) => {
    // TODO cancel the back button event
    this.backToRegister(false);
  })
}

我找不到在iOS上执行此操作的方法-我的研究使我得出结论,无法取消iOS后退按钮-例如,请参见here

任何想法或替代建议都将不胜感激!

1 个答案:

答案 0 :(得分:2)

您无法覆盖iOS的后退按钮。参见此SO question。基本上,您需要创建一个自定义按钮,您可以模仿iOS上后退按钮的外观并添加自己的事件处理程序。这就是您在本机iOS应用程序中执行此操作的方式,以及在NativeScript中执行此操作的方式,因为通过NativeScript使用本机控件。

nativescript中的操作栏可以在内部具有自定义布局,或者您可以只使用一个操作项并将其放在iOS的左侧,同时也可以根据需要在Android上隐藏按钮。