कीबोर्ड स्विफ्ट के साथ व्यू को स्थानांतरित करें: अनुकूलन और प्रदर्शन

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

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

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

कीबोर्ड स्विफ्ट के साथ व्यू को स्थानांतरित करें: अनुकूलन और प्रदर्शन

\n\n

प्रत्येक iOS डेवलपर कम से कम एक बार ऐसी स्थिति का सामना करता है जहाँ कीबोर्ड बेशर्मी से UITextField या UITextView को ढक लेता है। उपयोगकर्ता फ़ील्ड पर टैप करता है, कीबोर्ड बाहर आता है, और इंटरफ़ेस बेअसर रहता है। परिणाम: जलन, इनपुट त्रुटियाँ और ऐप को हटाना। Swift में इस समस्या का समाधान केवल "कीबोर्ड के साथ व्यू को स्थानांतरित करना" नहीं है, बल्कि प्रदर्शन और उपयोगकर्ता अनुभव के बारे में एक संपूर्ण विज्ञान है।

\n\n

इस लेख में, हम चर्चा करेंगे कि Swift का उपयोग करके कीबोर्ड के साथ व्यू को स्थानांतरित करना कैसे सही ढंग से लागू किया जाए, एनिमेशन को अनुकूलित किया जाए और सामान्य गलतियों से कैसे बचा जाए। आपको तैयार कोड मिलेगा जिसे आप सीधे प्रोजेक्ट में डाल सकते हैं, और समझेंगे कि कुछ दृष्टिकोण UI को धीमा क्यों करते हैं जबकि अन्य पूरी तरह से काम करते हैं।

\n\n

मानक समाधान अक्सर खराब क्यों काम करते हैं?

\n\n

Stack Overflow पर प्रश्न "Swift का उपयोग करके कीबोर्ड के साथ व्यू को स्थानांतरित करें" ने हज़ारों बार देखा गया है। और यह कोई संयोग नहीं है। कई शुरुआती 2015 के पहले मिलने वाले समाधान को कॉपी करते हैं, जो UIKeyboardWillShowNotification का उपयोग करता है और UIView के फ्रेम को कठोरता से बदलता है। परिणाम: झटकेदार एनिमेशन, मेमोरी लीक और विभिन्न iPhone मॉडलों पर बग।

\n\n

पुराने दृष्टिकोणों की मुख्य समस्याएँ:

\n
    \n
  • safe area को ध्यान में रखे बिना frame का सीधा परिवर्तन;
  • \n
  • कीबोर्ड एनिमेशन की अवधि और वक्र को अनदेखा करना;
  • \n
  • स्क्रीन रोटेशन और मल्टीटास्किंग हैंडलिंग का अभाव;
  • \n
  • भूलने की प्रवृत्ति: नोटिफिकेशन हटाए नहीं जाते, ऑब्जेक्ट साफ़ नहीं किए जाते।
  • \n
\n\n

आधुनिक Swift (5.0+) और UIKit सब कुछ सुरुचिपूर्ण और तेज़ी से करने की अनुमति देते हैं। आइए इष्टतम पैटर्न पर चर्चा करें।

\n\n

तैयारी: हमें क्या चाहिए

\n\n

Swift का उपयोग करके कीबोर्ड के साथ व्यू को स्थानांतरित करने के कार्यान्वयन के लिए, हम उपयोग करेंगे:

\n
    \n
  • कीबोर्ड ईवेंट को ट्रैक करने के लिए NotificationCenter;
  • \n
  • नोटिफिकेशन से पैरामीटर के साथ UIView.animate;
  • \n
  • बेस कंटेनर के रूप में UIScrollView (लेकिन इसके बिना भी काम चल सकता है);
  • \n
  • उचित मेमोरी प्रबंधन (weak self, removeObserver)।
  • \n
\n\n

हम सारा कोड UIViewController में लिखेंगे। यदि आप SwiftUI का उपयोग करते हैं - सिद्धांत समान हैं, लेकिन API अलग है (इसके बारे में लेख के अंत में)।

\n\n

चरण 1: कीबोर्ड नोटिफिकेशन पंजीकृत करें

\n\n

पहली चीज़ जो करने की ज़रूरत है वह है दो प्रमुख नोटिफिकेशन की सदस्यता लेना: UIResponder.keyboardWillShowNotification और UIResponder.keyboardWillHideNotification। ये ही हमें आकार, अवधि और एनिमेशन वक्र देते हैं।

\n\n
override func viewDidLoad() {\n    super.viewDidLoad()\n    \n    NotificationCenter.default.addObserver(\n        self,\n        selector: #selector(keyboardWillShow),\n        name: UIResponder.keyboardWillShowNotification,\n        object: nil\n    )\n    \n    NotificationCenter.default.addObserver(\n        self,\n        selector: #selector(keyboardWillHide),\n        name: UIResponder.keyboardWillHideNotification,\n        object: nil\n    )\n}\n
\n\n

ध्यान दें: object: nil का अर्थ है कि हम किसी भी कीबोर्ड से नोटिफिकेशन सुन रहे हैं। यह अधिकांश मामलों के लिए सही है।

\n\n

चरण 2: keyboardWillShow हैंडलर

\n\n

इस विधि में, हम नोटिफिकेशन से कीबोर्ड का आकार और एनिमेशन की अवधि निकालते हैं। फिर कीबोर्ड की ऊँचाई के बराबर व्यू को ऊपर ले जाते हैं।

\n\n
@objc private func keyboardWillShow(_ notification: Notification) {\n    guard let userInfo = notification.userInfo,\n          let keyboardFrame = userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect,\n          let duration = userInfo[UIResponder.keyboardAnimationDurationUserInfoKey] as? Double,\n          let curve = userInfo[UIResponder.keyboardAnimationCurveUserInfoKey] as? UInt else {\n        return\n    }\n    \n    let keyboardHeight = keyboardFrame.height\n    let animation                

ब्लॉग

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