【问题标题】:Is there a way to catch and cancel the back button event in a NativeScript app on the iOS platform?有没有办法在 iOS 平台上的 NativeScript 应用程序中捕获和取消后退按钮事件?
【发布时间】:2019-04-09 13:58:02
【问题描述】:

我正在开发适用于 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

非常感谢任何想法或替代建议!

【问题讨论】:

  • 这不是安卓问题,安卓标签应该去掉
  • 正如布拉德马丁的回答中指出的,后退按钮不能被覆盖。我最终只是简单地隐藏了它 - 对于这个页面,它是最简单和最合适的解决方案。

标签: ios nativescript nativescript-angular


【解决方案1】:

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

nativescript 中的操作栏可以在内部具有自定义布局,或者您可以只使用操作项并将其放置在 iOS 的左侧,同时如果您愿意,还可以在 Android 上隐藏按钮。

【讨论】:

    猜你喜欢
    • 2010-09-13
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    • 2018-10-31
    • 1970-01-01
    相关资源
    最近更新 更多