【问题标题】:Why does my TextEditor in SwiftUI ignore my .keyboardType?为什么我在 SwiftUI 中的 TextEditor 会忽略我的 .keyboardType?
【发布时间】:2020-09-25 09:42:09
【问题描述】:

我正在尝试在 SwiftUI 中使用 TextEditor(),并且需要 .keyboardType(.numberPad)。不幸的是,每当我设置此选项时,出于某种原因,我的设备和模拟器似乎完全忽略了它!无论我设置什么键盘选项,它都只显示默认键盘。

有人知道为什么会这样吗?我已经使用 Xcode 12 Beta 2 测试了 iOS 14.0 和 14.2 Beta。

【问题讨论】:

  • 我在尝试使用 .twitter 键盘时遇到了同样的问题。这似乎是 TextEditor 的问题,因为它适用于 TextField。如果您的号码不是多行,那么 TextField 对您来说可以吗?
  • 当我希望我太愚蠢而无法正确使用它。我现在可以使用 TextField,但 TextEditor 会好很多,因为它在 Form 内提供了更大的命中框。不过感谢您的回答。意味着我不是唯一一个,这可能是苹果方面的一个错误。希望他们能尽快解决。 :)

标签: ios swift swiftui


【解决方案1】:

这是一个使用SwiftUI-Introspect的丑陋解决方法

(FB8816771 是我使用 Apple 记录的反馈 ID。)

private extension View {
    func keyboardType_FB8816771(_ type: UIKeyboardType) -> some View {
        let customise: (UITextView) -> () = { uiTextView in
            uiTextView.keyboardType = type
        }
        
        return introspect(selector: TargetViewSelector.siblingContaining, customize: customise)
    }
}

【讨论】:

    【解决方案2】:

    如果这对 TextEditor 没有“完成”按钮这一事实的任何人有所帮助...扩展上面 Luke Howard 的答案...

    import Introspect
    
    extension View {
        func addDoneButton() -> some View {
            let helper = MainViewHelper()
            
            let customise: (UITextView) -> () = { uiTextView in
                let toolBar = UIToolbar(frame: CGRect(x: 0.0,
                                                      y: 0.0,
                                                      width: UIScreen.main.bounds.size.width,
                                                      height: 44.0))//1
                let flexible = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
                let barButton = UIBarButtonItem(title: "Done", style: .plain, target: uiTextView, action: #selector(helper.close))
                toolBar.setItems([flexible, barButton], animated: false)//4
                uiTextView.inputAccessoryView = toolBar
                uiTextView.keyboardAppearance = .light
            }
            
            return introspect(selector: TargetViewSelector.siblingContaining, customize: customise)
        }
    }
    
    class MainViewHelper {
        @objc func close() {
            
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-04
      相关资源
      最近更新 更多