कैसे एक बहुपरत UITextfield बनाने के लिए?


259

मैं एक एप्लिकेशन विकसित कर रहा हूं जहां उपयोगकर्ता को कुछ जानकारी लिखनी होगी। इस प्रयोजन के लिए मुझे एक UITextFieldबहु-रेखा की आवश्यकता है (सामान्य रूप UITextFieldसे एक एकल पंक्ति है)।

जैसा कि मैं Googling हूं मुझे इस उद्देश्य के UITextViewबजाय उपयोग करने का उत्तर मिलता है UITextfield


यहाँ छोटा नियंत्रण है जो मैंने उस उद्देश्य के लिए लिखा था। इसमें मल्टीलाइन सपोर्ट है और कीबोर्ड बंद करने के लिए भी बटन दिया गया है। इसका उपयोग करने के लिए स्वतंत्र महसूस करें। code.google.com/p/galtextfield
Gal Blank

2
इस थर्ड पार्टी क्लासेस का उपयोग अपने xcode प्रोजेक्ट को इम्पोर्ट करें और इसका उपयोग करें, इसके काम का बहुत अच्छा लिंक: github.com/adonoho/HPGrowingTextView
mahesh chowdary

जवाबों:


435

UITextField केवल एक-लाइन विशेष रूप से है।

आपकी Google खोज सही है, आपको बहु-पाठ के प्रदर्शन और संपादन के UITextViewबजाय उपयोग करने की आवश्यकता है UITextField

इंटरफ़ेस बिल्डर में, UITextViewजहाँ आप चाहते हैं उसे जोड़ें और "संपादन योग्य" बॉक्स चुनें। यह डिफ़ॉल्ट रूप से बहुस्तरीय होगा।


7
तो कृपया मुझे बताएं कि स्क्रीन पर नोट्स के लिए प्लेसहोल्डर और वर्ड रैप के साथ देशी कैलेंडर ऐप किस तरह व्यू बनाता है?
गेनादी रियाबिन

3
UITextView के लिए प्लेसहोल्डर कैसे सेट करें?
मणि

4
आप प्लेसहोल्डर को TextView में नहीं जोड़ सकते हैं, लेकिन आप TextView पर एक ग्रे लेबल जोड़ सकते हैं, और यदि उपयोगकर्ता कुछ पाठ इनपुट करते हैं तो इसे छिपा सकते हैं।
एंड्रयू रोमानोव

कृपया निम्नलिखित प्रश्न के साथ कोई मेरी मदद कर सकता है? यदि उपयोगकर्ता UITextView में बुलेटेड टेक्स्ट (कई लाइन ब्रेक) लिखता है, तो लाइन ब्रेक की कुल संख्या का पता कैसे लगाया जाए?
मार्कस

@ मर्कस आपको इसके लिए एक नया प्रश्न खोलना चाहिए
नाथन एफ।

20

आप UITextView का उपयोग करके UITextField को नकली कर सकते हैं। आपके पास समस्या यह है कि आप स्थान धारक की कार्यक्षमता खो देते हैं।

यदि आप UITextView का उपयोग करना चाहते हैं और प्लेसहोल्डर की आवश्यकता है, तो यह करें:

अपने दृश्य में प्लेसहोल्डर्स ने प्लेसहोल्डर्स को रंग और टेक्स्ट सेट किया:

myTxtView.textColor = .lightGray
myTxtView.text = "Type your thoughts here..."

जब आपका UITextView चुना जाता है तो प्लेसहोल्डर को गायब कर दें:

func textViewDidBeginEditing (textView: UITextView) {
    if myTxtView.textColor.textColor == ph_TextColor && myTxtView.isFirstResponder() {
        myTxtView.text = nil
        myTxtView.textColor = .white
    }
}

जब उपयोगकर्ता संपादन समाप्त करता है, तो सुनिश्चित करें कि कोई मान है। यदि नहीं है, तो प्लेसहोल्डर को फिर से जोड़ें:

func textViewDidEndEditing (textView: UITextView) {
    if myTxtView.text.isEmpty || myTxtView.text == "" {
        myTxtView.textColor = .lightGray
        myTxtView.text = "Type your thoughts here..."
    }
}

अन्य सुविधाओं के लिए आपको नकली की आवश्यकता हो सकती है:

UITextField के प्रायः हर अक्षर को बड़ा किया जाता है, आप उस सुविधा को UITableView में जोड़ सकते हैं:

myTxtView.autocapitalizationType = .words

UITextField आमतौर पर स्क्रॉल नहीं करता है:

myTxtView.scrollEnabled = false

18

ठीक है मैंने इसे कुछ चाल के साथ किया;) पहले एक निर्माण किया UITextFieldऔर इसे sizeइस तरह बढ़ाया :

CGRect frameRect = textField.frame;
        frameRect.size.height = 53;
        textField.frame = frameRect;

फिर UITextViewउसी क्षेत्र में बिलकुल निर्माण करें जिसे यू ने बनाया है UITextField, और इसे हटा दिया है background color। अब ऐसा लगता है कि यू के पास कई लाइनें हैं TextField!


2
मैंने ऑटो लेआउट का उपयोग किया और UITextField के सभी पक्षों को UITextView में पिन किया। वाकई बहुत बढ़िया ट्रिक, धन्यवाद!
फतमान

कृपया @ हाथीमन, क्या आप हमें ऑटो लेआउट के लिए अपना कोड दिखा सकते हैं?
एस्टेव

8
यह एक बनाता है UITextView। UITextField होने की बात यह है कि यह a से भिन्न व्यवहार करता है UITextView
नैट सीमर

2
के बीच मतभेदों का एक गुच्छा है : UITextViewऔर UITextfieldवे UIScrollViewबनाम से विरासत में आते हैं UIControl, न कि संपादन-द्वारा-डिफ़ॉल्ट-डिफ़ॉल्ट बनाम संपादन-योग्य-डिफ़ॉल्ट, बहु-पंक्ति बनाम एकल-पंक्ति, विभिन्न प्रतिनिधि प्रोटोकॉल, कोई-प्लेसहोल्डर बनाम प्लेसहोल्डर।
सैम बैलेन्टिएन

UITextViewपाठ के पैराग्राफ के लिए है। यदि आपको पाठ के अनुच्छेद की आवश्यकता है, तो इसका उपयोग करें, अन्यथा नहीं।
सैम बैलेन्टाइन

9

कई लाइन व्यवहार के अलावा, UITextView और UITextField के बीच मुख्य अंतर यह है कि UITextView एक प्लेसहोल्डर का प्रस्ताव नहीं करता है। इस सीमा को बायपास करने के लिए, आप "नकली प्लेसहोल्डर" के साथ एक UITextView का उपयोग कर सकते हैं।

विवरण के लिए इस SO प्रश्न को देखें: UITextView में प्लेसहोल्डर


2

यदि आपके पास पाठ की 2 पंक्तियों के साथ एक UITextField होना चाहिए, तो एक विकल्प यह है कि पाठ की दूसरी पंक्ति के लिए UITextField के उप-भाग के रूप में एक UILabel जोड़ा जाए। मेरे ऐप में एक UITextField है जिसे उपयोगकर्ता अक्सर महसूस नहीं करते कि टैप करके संपादन योग्य है, और मैं कुछ छोटे उपशीर्षक पाठ जोड़ना चाहता था जो UITextField में "Edit to Edit" कहते हैं।

CGFloat tapLlblHeight = 10;
UILabel *tapEditLbl = [[UILabel alloc] initWithFrame:CGRectMake(20, textField.frame.size.height - tapLlblHeight - 2, 70, tapLlblHeight)];
tapEditLbl.backgroundColor = [UIColor clearColor];
tapEditLbl.textColor = [UIColor whiteColor];
tapEditLbl.text = @"Tap to Edit";

[textField addSubview:tapEditLbl];

2

हां, एक UITextView वह है जिसे आप ढूंढ रहे हैं। आपको कुछ चीजों से अलग तरीके से निपटना होगा (जैसे वापसी कुंजी) लेकिन आप इसमें पाठ जोड़ सकते हैं, और यह आपको ऊपर और नीचे स्क्रॉल करने की अनुमति देगा यदि अंदर बहुत अधिक पाठ है।

इस लिंक में डेटा दर्ज करने के लिए स्क्रीन बनाने की जानकारी है:

डेटा प्रविष्टि स्क्रीन बनाएँ



0

उपरोक्त में h4xxr के उत्तर का पूरक, UITextField की ऊंचाई को समायोजित करने का एक आसान तरीका विशेषता निरीक्षकों में वर्ग सीमा शैली का चयन करना है-> पाठ क्षेत्र। (डिफ़ॉल्ट रूप से, एक UITextfield की सीमा शैली दीर्घवृत्त है।)

संदर्भ: यहां ब्रायन का उत्तर दिया गया: UITextField ऊँचाई कैसे सेट करें?


-1

मेरे लिए काम करने का एक और विकल्प है:

उपवर्ग UITextField और अधिलेखित करें:

- (void)drawTextInRect:(CGRect)rect

इस विधि में आप उदाहरण के लिए:

    NSDictionary *attributes = @{ NSFontAttributeName : self.font,
                                  NSForegroundColorAttributeName : self.textColor };

    [self.text drawInRect:verticalAlignedRect withAttributes:attributes];

यह कोड पाठ को आवश्यक रूप से कई पंक्तियों का उपयोग करके रेंडर करेगा यदि आय में पर्याप्त स्थान है। आप अपनी आवश्यकताओं के आधार पर कोई अन्य विशेषता निर्दिष्ट कर सकते हैं।

प्रयोग नहीं करें:

self.defaultTextAttributes

जो एक पंक्ति पाठ प्रतिपादन के लिए मजबूर करेगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.