SwiftUI Klavyesini Özel Düğmeyle Genişlet


10

SwiftUI numberPad için bir anahtar veya düğme eklemek için bir yol bulmaya çalışıyorum. Bulduğum tek referanslar bunun mümkün olmadığını söylüyor. Swift dünyasında, klavyeyi kapatmak veya başka bir işlev gerçekleştirmek için düğmeli bir araç çubuğu ekledim.

Üstteki düğmeyle bir ZStack görünümü bile oluşturabilirim ama numberPad'i kendi görünümüme eklemenin bir yolunu bulamıyorum.

Bu durumda gerçekten yapmaya çalıştığım tek şey veri girildiğinde numberPad'i kapatmak. İlk olarak, musluklarda kapatmak için SceneDelegate'i değiştirmeye çalıştım, ancak yalnızca görünümdeki açık alanda olmayan başka bir metin veya metin alanı görünümüne dokunduğumda çalışır.

window.rootViewController = UIHostingController(rootView: contentView.onTapGesture {
    window.endEditing(true)
})

İdeal olarak, sol alt alana bir Bitti anahtarı eklerdim. İkinci en iyi araç çubuğu SwiftUI'de yapılabilirse ekleyin.

resim açıklamasını buraya girin

Herhangi bir rehberlik takdir edilecektir.

Xcode Sürüm 11.2.1 (11B500)

Yanıtlar:


7

UIR yeniden sunulabilir protokolünü kullanarak sorunu çözdü

 struct TestTextfield: UIViewRepresentable {
    @Binding var text: String
    var keyType: UIKeyboardType
    func makeUIView(context: Context) -> UITextField {
        let textfield = UITextField()
      textfield.keyboardType = keyType
        let toolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: textfield.frame.size.width, height: 44))
        let doneButton = UIBarButtonItem(title: "Done", style: .done, target: self, action: #selector(textfield.doneButtonTapped(button:)))
        toolBar.items = [doneButton]
        toolBar.setItems([doneButton], animated: true)
        textfield.inputAccessoryView = toolBar
        return textfield
    }

    func updateUIView(_ uiView: UITextField, context: Context) {
        uiView.text = text

    }
}

extension  UITextField{
    @objc func doneButtonTapped(button:UIBarButtonItem) -> Void {
       self.resignFirstResponder()
    }

}

İçerik görünümünde kullanma

struct ContentView : View {
@State var text = ""

var body: some View {
    TestTextfield(text: $text, keyType: UIKeyboardType.phonePad)
        .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: 50)
        .overlay(
            RoundedRectangle(cornerRadius: 16)
                .stroke(Color.blue, lineWidth: 4)
    )
}

}


1
Saf bir SwiftUI çözümü umuyordum - ama haklısın - bir tane yok.
user2698617

Temsil ettiği bir koordinatörü uygulamak makeCoordinator()ve bunu temsilci seçme ve seçici hedef için kullanmak daha iyidir . Diğer yorumlara katılıyorum, henüz saf bir SwiftUI çözümü yok gibi görünüyor.
Bjørn Olav Ruud
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.