HarmonyOS 鸿蒙Next 如何在页面用户点击返回时弹出确认框

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 如何在页面用户点击返回时弹出确认框

我一个协议界面, 需要用户必须勾选并点击确认. 如果没有的话, 用户返回时需要提醒 Ta 必须点击确认.

所以, 我有 2 个问题:

1. 如何拦截用户的返回事件以弹出对话框?

2. 用户在点击对话框中的确认时, 调用什么函数来退出该页面?

不知道是否有大佬对此比较熟悉?


更多关于HarmonyOS 鸿蒙Next 如何在页面用户点击返回时弹出确认框的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

拦截主要看是否是navigation包裹的页面

1、如果用的是navigation做路由跳转

此时需要给NavDestination的onBackPressed()回调中绑定弹窗事件,返回true表示自己处理返回逻辑不进行页面路由,而用户在点击对话框中的确认时,则可以调用NavPathStack.pop()来在主动退出该页面

可以参考下面的demo (只针对拦截和弹窗):

@Component
struct PageOne {
  pageInfos: NavPathStack = new NavPathStack()

  build() {
    NavDestination(){...}.title('pageOne')
    .onBackPressed(() => {
      AlertDialog.show(
        {
          title: '确定返回', // 标题
          message: '是否要返回?', // 内容
          autoCancel: false, // 点击遮障层时,是否关闭弹窗。
          alignment: DialogAlignment.Bottom, // 弹窗在竖直方向的对齐方式
          offset: { dx: 0, dy: -20 }, // 弹窗相对alignment位置的偏移量
          primaryButton: {
            value: '取消',
            action: () => {
              console.info('取消');
            }
          },
          secondaryButton: {
            value: '确定',
            fontColor: '#D94838',
            action: () => {
              console.info('确认返回');
              this.pageInfos.pop()
            }
          },
          cancel: () => { // 点击遮障层关闭dialog时的回调
            console.info('Closed callbacks');
          }
        }
      )
      return true
    })
    .onReady((context: NavDestinationContext) => {
      this.pageInfos = context.pathStack
    })
  }
}

2、如果是@Entry修饰的页面

@Entry修饰的页面拦截用户返回事件以弹出对话框这个可以用自定义组件的生命周期中的onBackPress来拦截。这个生命周期函数返回true表示页面自己处理返回逻辑,不进行页面路由;返回false表示使用默认的路由返回逻辑,不设置返回值按照false处理。所以我们在这个生命周期函数中调用一个弹出对话框,再返回ture就可以实现拦截用户返回事件以弹出对话框,而用户在点击对话框中的确认时,如果是使用的router做路由则调用router.back()函数就可以来退出该页面

参考下面的demo:

[@Entry](/user/Entry)
@Component
struct PageOne {
  // 只有被[@Entry](/user/Entry)装饰的组件才可以调用页面的生命周期
  onBackPress() {
    console.info('Index onBackPres这是返回来了吗');
    AlertDialog.show(
      {
        title: '确定返回', // 标题
        message: '是否要返回?', // 内容
        autoCancel: false, // 点击遮障层时,是否关闭弹窗。
        alignment: DialogAlignment.Bottom, // 弹窗在竖直方向的对齐方式
        offset: { dx: 0, dy: -20 }, // 弹窗相对alignment位置的偏移量
        primaryButton: {
          value: '取消',
          action: () => {
            console.info('确认取消');
          }
        },
        secondaryButton: {
          value: '确定',
          fontColor: '#D94838',
          action: () => {
            console.info('确认返回后调用router.back');
            router.back()
          }
        },
        cancel: () => { // 点击遮障层关闭dialog时的回调
          console.info('Closed callbacks');
        }
      }
    )
    return true // 返回true表示页面自己处理返回逻辑,不进行页面路由;返回false表示使用默认的路由返回逻辑,不设置返回值按照false处理
  }

  build() {...}
}

更多关于HarmonyOS 鸿蒙Next 如何在页面用户点击返回时弹出确认框的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,实现页面用户点击返回时弹出确认框的功能,可以通过自定义弹窗组件来实现。以下是具体步骤:

  1. 定义自定义弹窗:创建一个包含确认和取消按钮的自定义弹窗。
  2. 监听返回事件:在页面的代码中,监听用户的返回操作。这通常可以通过重写页面的onBackPress方法或使用系统提供的返回事件监听器来实现。
  3. 显示弹窗:当用户执行返回操作时,触发弹窗显示。
  4. 处理弹窗按钮点击事件:在弹窗中,处理确认和取消按钮的点击事件。用户点击确认按钮时,可以执行页面退出或其他相关逻辑;点击取消按钮时,则取消返回操作。

请注意,弹窗的显示和关闭逻辑应确保在页面生命周期内正确执行,避免资源泄露或弹窗无法关闭的问题。如果弹窗在页面退出时销毁遇到问题,建议检查弹窗的销毁逻辑是否符合当前版本的API规范。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部