私はSwiftUIのTextField View
。主に2つの質問があります、
1)Swiftでは、Return Key(Text Input Traits)to Next
for TextField from Storyboard from likeこれでしょ?このため、SwiftUIでどの修飾子を使用しますか?
2)2つのTextfieldがあります。キーボードからReturn/nextボタンをクリックしたときに次のTextFieldに移動するにはどうすればよいですか?
誰かがこれで、またはこの機能を実行するための他の代替案で手助けできますか?
私の質問はSwiftUIに関するもので、UIKitのものではありません:)
どんな助けでも大歓迎です!!
2つの問題を解決するには、UIKitfromSwiftUIを使用する必要があります。まず、UIViewRepresentableを使用してTextFieldをカスタマイズする必要があります。コードはそれほどエレガントではありませんが、ここにテスト目的のサンプルコードがあります。きっと、もっと強力な解決策があるでしょう。
これがサンプルコードです:
import SwiftUI
struct KeyboardTypeView: View {
@State var firstName = ""
@State var lastName = ""
@State var focused: [Bool] = [true, false]
var body: some View {
Form {
Section(header: Text("Your Info")) {
TextFieldTyped(keyboardType: .default, returnVal: .next, tag: 0, text: self.$firstName, isfocusAble: self.$focused)
TextFieldTyped(keyboardType: .default, returnVal: .done, tag: 1, text: self.$lastName, isfocusAble: self.$focused)
Text("Full Name :" + self.firstName + " " + self.lastName)
}
}
}
}
struct TextFieldTyped: UIViewRepresentable {
let keyboardType: UIKeyboardType
let returnVal: UIReturnKeyType
let tag: Int
@Binding var text: String
@Binding var isfocusAble: [Bool]
func makeUIView(context: Context) -> UITextField {
let textField = UITextField(frame: .zero)
textField.keyboardType = self.keyboardType
textField.returnKeyType = self.returnVal
textField.tag = self.tag
textField.delegate = context.coordinator
textField.autocorrectionType = .no
return textField
}
func updateUIView(_ uiView: UITextField, context: Context) {
if isfocusAble[tag] {
uiView.becomeFirstResponder()
} else {
uiView.resignFirstResponder()
}
}
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
class Coordinator: NSObject, UITextFieldDelegate {
var parent: TextFieldTyped
init(_ textField: TextFieldTyped) {
self.parent = textField
}
func updatefocus(textfield: UITextField) {
textfield.becomeFirstResponder()
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if parent.tag == 0 {
parent.isfocusAble = [false, true]
parent.text = textField.text ?? ""
} else if parent.tag == 1 {
parent.isfocusAble = [false, false]
parent.text = textField.text ?? ""
}
return true
}
}
}
できません。SwiftUIにはまだレスポンダーチェーンの概念がありません。 View
は実際にはビュー自体ではなく、ビューの設定方法を説明する構造体にすぎないため、プログラムでフォーカスを開始することはできません。私の推測では、最終的にはEnvironmentValues
(行の切り捨て、自動修正など)を介して公開される可能性がありますが、現在は存在しません。