HarmonyOS TextInput的使用

​使用多个TextInput来进行组装,然后使用 focusControl.requestFocus(nextKeyStr)来进行TextInput的焦点切换,发现每次焦点切换,输入法键盘都会先收起来,然后再弹出,这个是否有解决的办法?

在实现验证码输入框的组件上出现的问题。​

HarmonyOS
2024-10-29 10:29:17
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
put_get

​验证码实现推荐使用text组件

1.写一个TextInput将其隐藏,给TextInput设置id后,在Text的点击事件中通过sendEventByKey方法将TextInput的点击事件转移到Text上,这样就可以点击Text拉起软键盘。

2.在onChange中对codeTxt进行赋值,将输入框的值赋给codeTxt,再通过codeTxt的下标进行展示。

3.对codeTxt进行监听,showMouse是一个布尔类型的数组,当前验证码处于输入状态时,将其值改为true,这样就可改变输入框的选中状态。​

//展示在页面上的文本  
@State @Watch('setValue') codeTxt: string = '';  
@State Index: number[] = [0, 1, 2, 3, 4, 5]  
//控制选中文本样式  
@State showMouse: boolean[] = [];  
  
@Builder  
buildAEnterCodeInput() {  
  Flex({  
    direction: FlexDirection.Row,  
    alignItems: ItemAlign.Center,  
    justifyContent: FlexAlign.SpaceBetween  
  }) {  
    Column(){  
      Row(){  
        //text将拿到的值进行逐个展示  
        Text(this.codeTxt[0])  
          .fontSize(18)  
          .fontWeight(600)  
          .textAlign(TextAlign.Center)  
          .width(50)  
          .height(50)  
          .margin({ left: 5, right: 5 })// .border({ width: 0.5, color: Color.Grey ,style: BorderStyle.Solid })  
            //设置验证码选中的样式  
          .border(this.showMouse[this.Index[0]] ? this.btnCancelBorderActive : this.btnCancelBorder)  
          .borderRadius(5)  
        ……  
      }  
      .onClick(()=>{  
        //通过sendEventByKey方法将输入框的点击事件转移给text  
        sendEventByKey('TextInput',10,'')  
      })  
      //写一个输入框,将其隐藏  
      TextInput({ controller: this.controller })  
        .width('100%')  
        .height(100)// .zIndex(1)  
        .opacity(0)  
        .id('TextInput')  
        .customKeyboard(this.CustomKeyboardBuilder())  
        .onChange((value) => {  
          //将隐藏的输入框的value值赋值给codeTxt  
          this.codeTxt = value  
          if (this.codeTxt.length >= 6) {  
            return  
          }  
        })  
    }  
  }  
  .backgroundColor(Color.White)  
  .height(50)  
  .margin({ left: 15, right: 15 })  
  .id("customInput")  
  .defaultFocus(false)  
  
}  
//对codeTxt进行监听,  
setValue() {  
  if (this.codeTxt) {  
    this.handelInputTxt(this.codeTxt.length, this.codeTxt);  
  } else {  
    this.handelInputTxt(0, '');  
  }  
}  
  
//改变输入框选中的值,showMouse是一个布尔类型的数组,当前验证码处于输入状态时,将其值改为true  
handelInputTxt(length: number, val: string) {  
  length === this.maxLength ? this.showMouse.fill(false) : this.showMouse.fill(false).splice(length - 1, 0, true);  
  console.log('----length', length)  
  console.info("----this.showMouse", JSON.stringify(this.showMouse));  
  // }  
}  
  
设置的公共页面,点击即可拉起半模态  
  
//公共页面,点击即可拉起半模态  
@Builder  
buildTitleName() {  
  CommonPage()  
    .onClick(() => {  
      //模态弹窗是否展示  
      this.isShow = true  
    })  
    .bindSheet($$this.isShow, this.bindSheetBuilder, {  
      height: '70%',  
      // detents:[SheetSize.MEDIUM,SheetSize.LARGE,500],  
      // backgroundColor:Color.Gray,  
      blurStyle: BlurStyle.Thick,  
      showClose: false,  
      // title:{title:""},  
      preferType: SheetType.CENTER  
    })  
  
多个textInput焦点转移时未复现键盘收起再弹出的问题;  
@Entry  
@Component  
struct Index5701_2 {  
  build() {  
    Column(){  
      TextInput()  
        .id('input1')  
        .backgroundColor(Color.Blue)  
      TextInput()  
        .id('input2')  
        .backgroundColor(Color.Blue)  
      TextInput()  
        .id('input3')  
        .backgroundColor(Color.Blue)  
      TextInput()  
        .id('input4')  
        .backgroundColor(Color.Blue)  
      TextInput()  
        .id('input5')  
        .backgroundColor(Color.Blue)  
      Button("焦点转移").onClick(() =>{  
        focusControl.requestFocus('input2')  
      })  
    }  
.justifyContent(FlexAlign.Center)  
.width('100%')  
  
}  
}
分享
微博
QQ
微信
回复
2024-10-29 17:48:21
相关问题
HarmonyOS TextInput组件使用
29浏览 • 1回复 待解决
TextInputonSubmit事件如何使用
2396浏览 • 1回复 待解决
HarmonyOS TextInput全宽文本框怎么使用
13浏览 • 1回复 待解决
HarmonyOS 如何限制TextInput规则?
441浏览 • 1回复 待解决
HarmonyOS TextInput问题
26浏览 • 1回复 待解决
TextInputdefaultFocus不响应
1618浏览 • 1回复 待解决
HarmonyOS TextInputstateStyles部分生效
511浏览 • 1回复 待解决
HarmonyOS TextInput 组件问题
503浏览 • 1回复 待解决
HarmonyOS TextInput焦点问题
426浏览 • 1回复 待解决
HarmonyOS TextInput 换行问题
760浏览 • 1回复 待解决
HarmonyOS 如何获取TextInput输入
42浏览 • 1回复 待解决
TextInputonBlur方法不回调
1208浏览 • 1回复 待解决