为啥我在 SwiftUI 中的 TextEditor 会忽略我的 .keyboardType?
Posted
技术标签:
【中文标题】为啥我在 SwiftUI 中的 TextEditor 会忽略我的 .keyboardType?【英文标题】: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 内提供了更大的命中框。不过感谢您的回答。意味着我不是唯一一个,这可能是苹果方面的一个错误。希望他们能尽快解决。 :) 【参考方案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()
【讨论】:
以上是关于为啥我在 SwiftUI 中的 TextEditor 会忽略我的 .keyboardType?的主要内容,如果未能解决你的问题,请参考以下文章
自定义属性包装器无法准确反映我在 SwiftUI 中的 TextField 的状态,知道为啥吗?
为啥我不能访问这个数组 ForEach 循环中的数据? SwiftUI