sendeventbykey

想让checkbox按条件选中,但是不知道怎么去拦截checkbox的选中,所有盖了一个row在checkbox上面,先让row响应事件,判断条件,再给checkbox发事件,但是为什么,发出去的事件 checkbox没响应,而row接收到了事件?

Stack({ alignContent: Alignment.TopEnd }) {
  Image(item.uri).width('100%').aspectRatio(1).borderRadius(10)
  Checkbox()
    .select(item.selected)
    .onChange(value => {
      item.selected = !item.selected
      this.selectedCount = this.selectedCount + (value ? 1 : -1)
    })
    .onClick(() => {
      let a = 1
    })
    .margin(10)
    .id("checkbox")
  Row().width(50).height(50).onClick(() => {
    if (!item.selected && this.selectedCount == (this.maxCount ?? 0)) {
      ToastUtils.getInstance().showToast(`超过数量限制:${this.maxCount}`)
    } else {
      sendEventByKey("checkbox", 10, "")
    }
  })
}
HarmonyOS
2024-12-26 15:01:13
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zxjiu

可参考下使用hitTestBehavior来设置组件是否响应touch事件,按条件设置checkbox的hitTestBehavior为HitTestMode.Default 或者 HitTestMode.None

参考文档: https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-attributes-hit-test-behavior-V5

示例代码如下:

@Entry
@Component
struct Index {
  @State selected: boolean = false;
  @State selectedCount: number = 0;
  @State maxCount: number = 5;

  build() {
    Column() {

      myCheckBox({selectedCount:this.selectedCount,maxCount:this.maxCount})
      myCheckBox({selectedCount:this.selectedCount,maxCount:this.maxCount})
      myCheckBox({selectedCount:this.selectedCount,maxCount:this.maxCount})
      myCheckBox({selectedCount:this.selectedCount,maxCount:this.maxCount})
      myCheckBox({selectedCount:this.selectedCount,maxCount:this.maxCount})
      myCheckBox({selectedCount:this.selectedCount,maxCount:this.maxCount})
    }.onClick(() => {
      if(this.selectedCount>=this.maxCount)
        console.log('tttttt 超过数量限制:' + this.maxCount);
    })
  }
}
@Component
struct myCheckBox{
  @Link selectedCount: number
  @Link  maxCount: number
  private selected:boolean =  false
  build(){
    Checkbox()
      .select(this.selected)
      .onChange(value => {

        console.log('tttttt 选中:' + value);
        if (value){
          this.selectedCount++
        }
        else{
          this.selectedCount--
        }
        this.selected=!this.selected
        console.log('tttttt selectedCount:' + this.selectedCount);
      })
      .hitTestBehavior(this.selected==false && this.selectedCount >= this.maxCount ? HitTestMode.None : HitTestMode.Default)
      .margin(10)
  }
}
分享
微博
QQ
微信
回复
2024-12-26 18:08:40
提问
该提问已有0人参与 ,帮助了0人