कस्टम बटन के साथ SwiftUI कीबोर्ड बढ़ाएँ


10

मैं SwiftUI नंबरपैड में एक कुंजी या बटन जोड़ने का एक तरीका खोजने की कोशिश कर रहा हूं। केवल संदर्भ मैंने पाया है कि यह संभव नहीं है। स्विफ्ट दुनिया में मैंने कीबोर्ड को खारिज करने या कुछ अन्य फ़ंक्शन करने के लिए एक बटन के साथ एक टूलबार जोड़ा।

मैं भी शीर्ष पर बटन के साथ एक ZStack दृश्य का निर्माण होगा, लेकिन मैं अपने खुद के दृश्य में नंबरपैड को जोड़ने के लिए एक रास्ता नहीं मिल सकता है।

मैं वास्तव में इस मामले में करने की कोशिश कर रहा हूं जब डेटा दर्ज किया जाता है तो नंबरपैड को खारिज कर दिया जाता है। मैंने पहले टैप पर खारिज करने के लिए सीनडेलेगेट को संशोधित करने का प्रयास किया, लेकिन यह केवल तभी काम करता है जब मैं किसी अन्य पाठ या टेक्स्टफील्ड दृश्य में खुले स्थान पर नहीं देखता हूं।

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

आदर्श रूप में, मैं निचले बाएँ स्थान के लिए एक Done कुंजी जोड़ूंगा। दूसरा सबसे अच्छा टूलबार जोड़ें यदि यह स्विफ्टयूआई में किया जा सकता है।

यहां छवि विवरण दर्ज करें

किसी भी मार्गदर्शन की सराहना की जाएगी।

Xcode संस्करण 11.2.1 (11B500)

जवाबों:


7

UIRepresentable प्रोटोकॉल का उपयोग करके समस्या को हल किया

 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()
    }

}

सामग्री दृश्य में उपयोग करना

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
मैं एक शुद्ध SwiftUI समाधान की उम्मीद कर रहा था - लेकिन मुझे लगता है कि आप सही हैं - एक नहीं है।
user2698617

समन्वयक को लागू करने makeCoordinator()और प्रतिनिधिमंडल और चयनकर्ता लक्ष्य के लिए उपयोग करना बेहतर है । मैं अन्य टिप्पणियों से सहमत हूँ, वहाँ अभी तक एक शुद्ध SwiftUI समाधान मौजूद नहीं है।
ब्योर्न ओलाव रूद
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.