使用 .focused() 点击不同视图时如何删除 TextField 焦点?

Posted

技术标签:

【中文标题】使用 .focused() 点击不同视图时如何删除 TextField 焦点?【英文标题】:How can I remove TextField focus when tapping a different view using .focused()? 【发布时间】:2021-09-30 21:51:14 【问题描述】:

我正在尝试使用 ios15 的 .focused() 修饰符来使用户能够点击文本字段之外的任何位置来移除焦点。我将脱离https://www.youtube.com/watch?v=GqXVFXnLVH4 中提供的示例。以下是我的非工作尝试:

enum Field 
  case textField
  case notTextField


struct ContentView: View 

  @State var textInput = ""
  @FocusState var focusState:Field?

  var body: some View 
    VStack 
      TextField("Enter some text...", text: $textInput)
        .focused($focusState, equals: .textField)
      Rectangle()
        .focused($focusState, equals: .notTextField)
        .onTapGesture 
          state = .notTextField
        
    
  

【问题讨论】:

【参考方案1】:

我发现解决方案不是聚焦另一个元素,而是将文本字段的焦点切换为 false:

@State var textInput = ""
@FocusState var textFieldIsFocused: Bool

var body: some View 
    VStack 
        TextField("Enter some text...", text: $textInput)
            .focused($textFieldIsFocused)
        Rectangle()
            .onTapGesture 
                textFieldIsFocused = false
            
    

【讨论】:

以上是关于使用 .focused() 点击不同视图时如何删除 TextField 焦点?的主要内容,如果未能解决你的问题,请参考以下文章

如何在角度5中禁用或覆盖cdk-focused

删除子视图时如何修复触摸禁用?

滚动到 Focused Field Cordova

如何在自定义滑动(而不是滑动删除)单元格(滑动到邮件/短信)中点击一个单元格时删除在其他 TableView 单元格中添加的子视图

专注于一个窗口形式的多个列表视图

如何在 Angular 中禁用或覆盖 cdk-focused