UITextView में बिल्ट-इन placeholder क्यों नहीं है और इसका समाधान
\n\nहर iOS डेवलपर जिसने कभी UITextView के साथ काम किया है, उसे एक ही समस्या का सामना करना पड़ा है: UITextField के विपरीत, UITextView में कोई बिल्ट-इन placeholder प्रॉपर्टी नहीं है। आप एक मल्टी-लाइन टेक्स्ट इनपुट फील्ड बनाते हैं, ऐप लॉन्च करते हैं — और आपको एक खाली सफेद आयत दिखती है। उपयोगकर्ता को समझ नहीं आता कि वहां क्या लिखना है, और डिज़ाइनर नाराज़ हो जाता है।
Apple ने यह प्रॉपर्टी क्यों नहीं जोड़ी? ऐतिहासिक रूप से, UITextView को बड़े टेक्स्ट (जैसे नोट्स या ईमेल) को प्रदर्शित और संपादित करने के लिए डिज़ाइन किया गया था, न कि संकेत वाले इनपुट फील्ड के रूप में। लेकिन समय बदल गया है: आज हम UITextView का उपयोग कमेंट, विवरण, बायोग्राफी — हर जगह करते हैं जहां placeholder की जरूरत होती है।
इस लेख में हम Swift में UITextView के अंदर placeholder text जोड़ने के 3 सिद्ध तरीके सीखेंगे। आप जानेंगे कि इसे UILabel, NSAttributedString एट्रिब्यूट्स और अपना खुद का सबक्लास बनाकर कैसे करें। चलिए शुरू करते हैं!
तरीका 1: UITextView के ऊपर क्लासिक UILabel
\n\nसबसे आसान और समझने योग्य तरीका — UITextView के ऊपर एक UILabel रखना और उसकी दृश्यता को नियंत्रित करना। यह तरीका शुरुआती लोगों और उन प्रोजेक्ट्स के लिए आदर्श है जिनमें जटिल कस्टमाइज़ेशन की आवश्यकता नहीं है।
यह कैसे काम करता है
\n\nआप UILabel को UITextView के चाइल्ड एलिमेंट के रूप में जोड़ते हैं, उसे placeholder टेक्स्ट देते हैं, और जब उपयोगकर्ता टाइप करना शुरू करता है तो उसे छिपा देते हैं। यहाँ एक स्टेप-बाय-स्टेप उदाहरण है:
import UIKit\n\nclass ViewController: UIViewController, UITextViewDelegate {\n \n @IBOutlet weak var textView: UITextView!\n let placeholderLabel = UILabel()\n \n override func viewDidLoad() {\n super.viewDidLoad()\n textView.delegate = self\n setupPlaceholder()\n }\n \n func setupPlaceholder() {\n placeholderLabel.text = "अपनी टिप्पणी लिखें..."\n placeholderLabel.font = UIFont.systemFont(ofSize: 16)\n placeholderLabel.textColor = UIColor.lightGray\n placeholderLabel.translatesAutoresizingMaskIntoConstraints = false\n textView.addSubview(placeholderLabel)\n \n NSLayoutConstraint.activate([\n placeholderLabel.topAnchor.constraint(equalTo: textView.topAnchor, constant: 8),\n placeholderLabel.leadingAnchor.constraint(equalTo: textView.leadingAnchor, constant: 5),\n placeholderLabel.trailingAnchor.constraint(equalTo: textView.trailingAnchor, constant: -5)\n ])\n }\n \n func textViewDidChange(_ textView: UITextView) {\n placeholderLabel.isHidden = !textView.text.isEmpty\n }\n}\n\nमहत्वपूर्ण: UITextViewDelegate सेट करना और textViewDidChange मेथड को लागू करना न भूलें। यदि आप SwiftUI का उपयोग कर रहे हैं, तो दृष्टिकोण अलग होगा — वहां .overlay मॉडिफायर का उपयोग किया जाता है।
फायदे और नुकसान
\n- \n
- फायदे: सरलता, समझने में आसानी, iOS के किसी भी संस्करण पर काम करता है। \n
- नुकसान: यदि textview के insets बदलते हैं तो कॉन्स्ट्रेंट्स पर ध्यान देना होगा। साथ ही, यह तब काम नहीं करेगा जब textview में अलग-अलग अलाइनमेंट वाला
NSAttributedStringहो। \n
तरीका 2: NSAttributedString के माध्यम से Placeholder
\n\nअधिक सुरुचिपूर्ण तरीका — स्ट्रिंग एट्रिब्यूट्स का उपयोग करना। विचार यह है कि आप placeholder को ग्रे रंग के एट्रिब्यूटेड टेक्स्ट के रूप में दिखाते हैं, और जब उपयोगकर्ता टाइप करना शुरू करता है तो इसे सामान्य टेक्स्ट से बदल देते हैं।
\n\nयह तरीका विशेष रूप से तब उपयोगी है जब आप Swift में UITextView के साथ काम कर रहे हैं और अतिरिक्त व्यूज़ से परेशान नहीं होना चाहते।
\n\nकार्यान्वयन
\n\nimport UIKit\n\nclass ViewController: UIViewController, UITextViewDelega