2010-08-20 25 views
13

में विस्तार से टेक्स्ट लाइन में UITableViewCellStyleValue1 की सेल शैली के साथ UITableView का उपयोग कर रहा हूं।UITableViewCell

मैं detailTextLabel में एकाधिक लाइनें रखना चाहता हूं, क्या यह संभव है? या मुझे एक कस्टम सेल बनाना है?

उत्तर

16

आप वहां 2 लाइनें प्राप्त करने के लिए cell.detailTextLabel.numberOfLines = 2 सेट कर सकते हैं। हालांकि, मुझे संदेह है कि UITableViewCell लेबल को उस स्थिति में रखेगा जैसा आप उम्मीद करते हैं। आप UITableViewCell को उपclass करना चाहते हैं और लेबल को स्थिति में रखने के लिए -layoutSubviews ओवरराइड करना चाहते हैं। आप [super layoutSubviews] पर कॉल कर सकते हैं और फिर लेबल की स्थिति को ट्विक कर सकते हैं। विवरण टेक्स्ट लेबल के लिए सही आकार की गणना करने के लिए आप शायद -[NSString sizeWithFont:constrainedToSize:lineBreakMode:] का उपयोग करना चाहेंगे।

वैकल्पिक रूप से, UITableViewCell subclassing के बजाय, आप -tableView:willDisplayCell:forRowAtIndexPath: में tweaks करने का प्रयास कर सकते हैं, हालांकि यदि सेल कभी निर्णय लेता है कि इसे फिर से लेआउट की आवश्यकता है, तो आपके tweaks मिटा दिए जाएंगे। मैं आपको उपclassing दृष्टिकोण के साथ जाने की सलाह देते हैं।

संपादित: Btw, उपवर्ग दृष्टिकोण के साथ, तुम सब करने की ज़रूरत [MyTableViewCellSubclass alloc] को [UITableViewCell alloc] बदल रहा है। चूंकि आप नई विधियों या गुणों को शुरू नहीं कर रहे हैं, इसलिए वेरिएबल अभी भी UITableViewCell के रूप में टाइप किया जा सकता है और आपको कोई अन्य कोड नहीं बदलना होगा।

+0

उत्तर के लिए बहुत बहुत धन्यवाद। मैंने UITableViewCell को उप-वर्गीकृत किया लेकिन मैंने इसे प्रोग्रामेटिक रूप से करने के बजाय लेबल्स को लेआउट करने के लिए एक निब बनाया। क्या आप मुझसे जो कुछ भी कर रहे हैं उससे अलग होगा। फिर भी धन्यवाद। – mshaaban

+0

एक निब बनाना पूरी तरह से ठीक है (हालांकि यदि आप आईओएस 4.0 पर हैं तो मैं nib लोडिंग को अनुकूलित करने के लिए 'UINib' का उपयोग करने की सलाह देता हूं)। '-layoutSubviews' का उपयोग करके लेबल को ट्विक करने का लाभ यह है कि आप मौजूदा 'टेक्स्ट लेबल' और 'detailTextLabel' गुणों का पुन: उपयोग कर सकते हैं, लेकिन आप उनको उपयोग करने के लिए आवश्यक नहीं हैं। हाल ही में स्विफ्ट संस्करणों में –

+0

'cell.detailTextLabel' अब वैकल्पिक है इसलिए 'cell.detailTextLabel.numberOfLines = 2'' cell.detailTextLabel !numberOfLines = 2' –

3

विवरण टेक्स्ट टेक्स्ट एक UILabel है, शब्द रैपिंग नियम आपके द्वारा बनाए गए लेबल के समान ही लागू होते हैं।

http://developer.apple.com/iphone/library/documentation/uikit/reference/UILabel_Class/Reference/UILabel.html#//apple_ref/occ/instp/UILabel/lineBreakMode

संपादित करें: बस सोचा था कि, आप भी अगर पाठ की कुछ श्रेणियां सीमा से परे हो जाता है सेल की ऊंचाई को बदलना होगा। शायद 2 या 3 ठीक है।