HarmonyOS TextInput组件无法自动获取焦点

设置了defaultFocus,但依然无法自动获取焦点。测试代码如下:

@Entry
@Component
export default struct AutoKeyboard {
  @State show: boolean = false
  build() {
    Row() {
      if (this.show) {
        TextInput()
          .height(40)
          .width(100)
          .id('input')
            // .enableKeyboardOnFocus(true)
          .defaultFocus(true)
          .onFocus(()=> {
            console.log(`我获得焦点了`);
          })
      }
      Button('发送')
        .onClick(() => {
          this.show = !this.show
        })
    }
    .id('testRowAutoKeyboard')
    .width(150)
    .height(40)
    .backgroundColor(Color.Red)
  }
}

如上述代码,当show的默认值是true的时候,可以自动拉起键盘,但如果show默认值是false,通过点击按钮来改变,通过模拟器,点击tab键,发现,焦点在按钮上面,但给按钮设置了focusOnTouch也不行,点击tab发现焦点会在TextInput上面,但也是不会弹出键盘的。

HarmonyOS
14h前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

defaultFocus默认获焦只有在首次加载页面的的时候会生效,渲染一次。解决方案可以在textInput组件的onApear回调中将焦点转移到组件自身,参考demo:

@Entry
@Component
export default struct AutoKeyboard {
  @State show: boolean = false
  build() {
    Row() {
      if (this.show) {
        TextInput()
          .height(40)
          .width(100)
          .id('input')// .enableKeyboardOnFocus(true)
            // .defaultFocus(true)
          .onAppear(() => {
            focusControl.requestFocus('input')
          })
          .onFocus(() => {
            console.log(`我获得焦点了`);
          })
      }
      Button('发送')
        .onClick(() => {
          this.show = !this.show
        })
    }
    .id('testRowAutoKeyboard')
    .width(150)
    .height(40)
    .backgroundColor(Color.Red)
  }
}
分享
微博
QQ
微信
回复
13h前
相关问题
HarmonyOS TextInput自动获取焦点问题
116浏览 • 1回复 待解决
HarmonyOS TextInput无法取消焦点
339浏览 • 1回复 待解决
TextInput如何取消自动获得焦点
607浏览 • 1回复 待解决
TextInput组件获取焦点的几种场景
2715浏览 • 1回复 待解决
HarmonyOS TextInput焦点问题
421浏览 • 1回复 待解决
HarmonyOS TextInput 取消默认焦点
552浏览 • 1回复 待解决
TextInput输入行满时无法自动换行
463浏览 • 1回复 待解决
HarmonyOS 主动获取组件焦点
71浏览 • 1回复 待解决