iOS Swift में टैप करके कीबोर्ड बंद करें: 3 सही तरीके

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: कीबोर्ड अपने आप बंद क्यों नहीं होता?

\n

नमस्ते, डेवलपर साथी! अगर आपने कभी iOS पर लॉगिन फॉर्म, सर्च बार या मैसेजिंग ऐप बनाया है, तो आपने यह स्थिति ज़रूर देखी होगी: यूज़र ने टेक्स्ट टाइप किया, लेकिन कीबोर्ड स्क्रीन पर अटका रहता है। "Done" बटन दबाया नहीं गया, यूज़र खाली जगह पर टैप करता है, लेकिन कुछ नहीं होता। यह एक क्लासिक समस्या है।

\n\n

यह Stack Overflow पर सबसे लोकप्रिय विषयों में से एक है, जहाँ सवाल "Close iOS Keyboard by touching anywhere using Swift" ने हज़ारों व्यूज़ प्राप्त किए हैं। समस्या यह नहीं है कि यह करना मुश्किल है। समस्या यह है कि शुरुआती (और अनुभवी भी) अक्सर गलत या "गंदे" तरीके चुनते हैं। आइए शीर्ष 3 गलतियों को समझें, और फिर तीन सही, काम करने वाले समाधान देखें।

\n\n

आज हम Swift और UIKit के बारे में बात कर रहे हैं। अगर आप SwiftUI का उपयोग करते हैं, तो भी देखें, सिद्धांत समान हैं।

\n\n

गलती #1: "हर जगह TapGesture लगाना"

\n

सबसे आम गलती है UIView पर UITapGestureRecognizer जोड़ना, लेकिन cancelsTouchesInView को बंद करना भूल जाना। इसका परिणाम यह होता है कि बटन और टेबल टैप पर प्रतिक्रिया देना बंद कर देते हैं। यूज़र "Send" बटन दबाता है, लेकिन फॉर्म सबमिट होने के बजाय कीबोर्ड बंद हो जाता है।

\n\n

गलत कोड का उदाहरण:

\n
override func viewDidLoad() {\n    super.viewDidLoad()\n    let tap = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))\n    view.addGestureRecognizer(tap)\n}\n\n@objc func dismissKeyboard() {\n    view.endEditing(true)\n}
\n\n

पहली नज़र में सब ठीक लगता है। लेकिन व्यवहार में, अगर आपके पास UITableView या UIButton है, तो उनके टैप इस जेस्चर द्वारा "निगल" लिए जा सकते हैं। यह विशेष रूप से तब ध्यान देने योग्य होता है जब आप scrollView पर ऐसा जेस्चर जोड़ते हैं।

\n\n

सुधार कैसे करें:

\n

लाइन tap.cancelsTouchesInView = false जोड़ें। यह अन्य इंटरफ़ेस तत्वों को टच इवेंट प्राप्त करने की अनुमति देगा।

\n\n
let tap = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))\ntap.cancelsTouchesInView = false\nview.addGestureRecognizer(tap)
\n\n

लेकिन यह भी एक आदर्श समाधान नहीं है, अगर आपके पास जटिल इंटरफ़ेस है।

\n\n

गलती #2: "खाली जगह पर टैप करने से टेबल खराब हो जाती है"

\n

दूसरी आम समस्या UIScrollView या UITableView के साथ गलत इंटरैक्शन है। यदि आप view पर UITapGestureRecognizer जोड़ते हैं जिसमें टेबल है, तो सेल पर टैप करने पर एक साथ जेस्चर और didSelectRow मेथड दोनों ट्रिगर हो सकते हैं। या इससे भी बुरा, जेस्चर टच को इंटरसेप्ट कर लेगा और सेल हाइलाइट नहीं होगी।

\n\n

समाधान: UIGestureRecognizerDelegate का उपयोग करें

\n

gestureRecognizer(_:shouldReceive:) मेथड को इम्प्लीमेंट करें और जाँचें कि टैप टेक्स्ट फील्ड पर हुआ या किसी अन्य एलिमेंट पर। यदि टच UITextField या UITextView पर हुआ है, तो जेस्चर को ब्लॉक न करें।

\n\n
extension ViewController: UIGestureRecognizerDelegate {\n    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {\n        // टेक्स्ट फील्ड पर हुए टच को इंटरसेप्ट न करें\n        if touch.view is UITextField || touch.view is UITextView {\n            return false\n        }\n        return true\n    }\n}
\n\n

अब जेस्चर केवल खाली क्षेत्रों पर टैप करने पर ही काम करेगा, और टेक्स्ट फील्ड इंटरैक्टिव रहेंगे।

\n\n

गलती #3: "कीबोर्ड से वापसी (Return) को भूल जाना"

\n

कई डेवलपर टैप करके कीबोर्ड बंद करना तो लागू करते हैं, लेकिन कीबोर्ड पर "Return" (Enter) बटन को भूल जाते हैं। यूज़र "Done" दबा सकता है और उम्मीद करता है कि कीबोर्ड बंद हो जाएगा। यदि ऐसा नहीं किया गया, तो UX खराब होगा।

\n\n

सुधार कैसे करें:

\n

UITextFieldDelegate प्रोटोकॉल को सब्सक्राइब करें और textFieldShouldReturn मेथड को इम्प्लीमेंट करें:

\n\n
class View

ब्लॉग

पुस्तक अनुशंसाएँ