#ios #swift #swiftui
#iOS #swift #swiftui
Вопрос:
Я пытаюсь использовать a TextEditor()
в SwiftUI и понадобится .keyboardType(.numberPad)
. К сожалению, всякий раз, когда я устанавливаю этот параметр, по какой-то причине мое устройство и симулятор, похоже, полностью игнорируют его! Он просто показывает клавиатуру по умолчанию, независимо от того, что я установил в качестве опции клавиатуры.
Кто-нибудь знает, почему это может быть? Я тестировал бета-версии iOS 14.0 и 14.2 с помощью Xcode 12 Beta 2.
Комментарии:
1. У меня такая же проблема при попытке использовать клавиатуру .twitter. Похоже, это проблема с TextEditor, поскольку он отлично работает с текстовым полем. Если ваш номер не будет многострочным, возможно, вам подойдет текстовое поле?
2. Черт, я надеялся, что я просто слишком глуп, чтобы правильно его использовать. Пока я могу работать с текстовым полем, но TextEditor был бы намного лучше, поскольку он обеспечивает больший хитбокс внутри формы. Хотя спасибо за ответ. Означает, что я не единственный, и это, вероятно, ошибка на стороне Apple. Надеюсь, они скоро это исправят. 🙂
Ответ №1:
Вот уродливый обходной путь с использованием SwiftUI-Introspect
(FB8816771 — это идентификатор обратной связи, который я зарегистрировал в Apple.)
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 нет кнопки «Готово» … расширяя ответ Люка Говарда выше…
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() {
}
}