HarmonyOS鸿蒙Next中如果从A页面跳转到B页面正常情况下通过手势右滑可以返回A页面,那么怎么阻止B页面手势返回

HarmonyOS鸿蒙Next中如果从A页面跳转到B页面正常情况下通过手势右滑可以返回A页面,那么怎么阻止B页面手势返回

【问题描述】:如果从A页面跳转到B页面正常情况下通过手势右滑可以返回A页面,那么怎么阻止B页面手势返回?Navigation和router两种禁用右滑手势返回怎样实现呢

【问题现象】:不涉及

【版本信息】:不涉及

【复现代码】:不涉及

【尝试解决方案】:

  1. router方式可以使用onBackPress()实现,但是返回按钮也会屏蔽,有其他实现方法吗?

  2. Navigation怎样禁用右滑手势?

5 回复

【背景知识】

onBackPressed:当与Navigation绑定的导航控制器中存在内容时,此回调生效。当点击返回键时,触发该回调。返回值为true时,表示重写返回键逻辑,返回值为false时,表示回退到上一个页面。

【参考方案】

可参考H5页面侧滑拦截示例,通过WebviewController实现拦截H5页面侧滑回退至框架页面上一页。

  1. 通过onBackPressed()自定义返回逻辑对侧滑进行拦截。
  2. 通过accessStep()判断当前网页是否能回退至上一页,如是,则将页面回退至上一页,否则,回退至框架页面上一页。
NavDestination() {
}
.onBackPressed(() => {
  if (this.controller.accessStep(-1)) {
    this.controller.backward()           // 返回上一页
    return true
  } else {
    return false
  }
})

更多关于HarmonyOS鸿蒙Next中如果从A页面跳转到B页面正常情况下通过手势右滑可以返回A页面,那么怎么阻止B页面手势返回的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


router你通过变量控制一下就好了,

NavDestination的onBackPressed事件可以监听到navigation的系统返回事件,

在HarmonyOS Next中,可通过在B页面中重写onBackPress()方法并返回true来阻止手势返回。示例代码:

onBackPress(): boolean {
  return true; // 阻止返回
}

此操作会禁用B页面的右滑返回和系统返回键功能。

在HarmonyOS Next中,可以通过以下方式分别禁用Navigation和Router模式下的右滑返回手势:

1. Router方式禁用右滑返回: 使用router.disableBackGesture()方法:

import { router } from '@kit.ArkUI';

// 在B页面onPageShow生命周期中禁用
onPageShow() {
  router.disableBackGesture();
}

// 在页面销毁时恢复(可选)
onPageHide() {
  router.enableBackGesture();
}

这种方式只会禁用右滑手势,不会影响导航栏返回按钮。

2. Navigation方式禁用右滑返回: 在Navigation组件中设置gestureEnabled属性为false:

Navigation() {
  // 页面内容
}
.gestureEnabled(false)

3. 页面级统一控制: 也可以在页面路由配置中全局禁用:

router.pushUrl({
  url: 'pages/PageB',
  params: { disableGesture: true }
})

相比使用onBackPress()拦截返回事件,上述方法能更精准地控制手势行为,避免影响硬件返回键和导航栏返回按钮的正常功能。

回到顶部