शीर्षक में पाठ की दो पंक्तियों के साथ UIButton (नंबरऑफलाइन = 2)


86

मैं UIButtonइसके शीर्षकलेब में पाठ की दो पंक्तियाँ बनाने की कोशिश कर रहा हूँ । यह वह कोड है जिसका मैं उपयोग कर रहा हूं:

    UIButton *titleButton = [[UIButton alloc] initWithFrame:CGRectMake(15, 10, frame.size.width-100, 100)];
    titleButton.titleLabel.font = [UIFont boldSystemFontOfSize:24.0];
    [titleButton setTitle:@"This text is very long and should get truncated at the end of the second line" forState:UIControlStateNormal];
    titleButton.titleLabel.lineBreakMode = UILineBreakModeTailTruncation;
    titleButton.titleLabel.numberOfLines = 2;
    [self addSubview:titleButton];

जब मैं यह कोशिश करता हूं, तो पाठ केवल एक पंक्ति में दिखाई देता है। यह UIButton.titleLabelसेट numberOfLines=0और उपयोग करने के लिए पाठ की एक से अधिक पंक्ति को प्राप्त करने का एकमात्र तरीका लगता है UILineBreakModeWordWrap। लेकिन यह पाठ को दो पंक्तियों के होने की गारंटी नहीं देता है।

UILabelहालाँकि, एक सादे का उपयोग करना काम करता है:

    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(15, 10, frame.size.width-100, 100)];
    titleLabel.font = [UIFont boldSystemFontOfSize:24.0];
    titleLabel.text = @"This text is very long and should get truncated at the end of the second line";
    titleLabel.numberOfLines = 2;
    titleLabel.lineBreakMode = UILineBreakModeTailTruncation;
    [self addSubview:titleLabel];

क्या किसी को पता है कि कैसे UIButtonदो लाइनों के साथ काम करना है? क्या UILabelटेक्स्ट को होल्ड करने के लिए एक अलग बनाने और बटन के उप-भाग के रूप में जोड़ने का एकमात्र समाधान है ?


1
क्या आपने यह देखा है ? - stackoverflow.com/questions/604632/…
विराज

विराज, हां, यदि आप सेट करते हैं numberOfLines=0और उपयोग करते हैं UILineBreakModeWordWrap, तो आप कई लाइनें प्राप्त कर सकते हैं। इसके साथ समस्या यह है कि यदि पाठ बहुत लंबा है तो दो से अधिक लाइनें दे सकता है। मैं दूसरी पंक्ति के अंत में एक एलिप्स के साथ वास्तव में दो लोन चाहता हूं (यदि पाठ बहुत लंबा है)।
बाजार

ओह, तो मुझे लगता है कि सबव्यू जोड़ने का एकमात्र तरीका हो सकता है।
विराज

जवाबों:


87

अधिक हालिया iOS संस्करणों के लिए अद्यतित उत्तर

चूँकि यह स्वीकृत उत्तर है, यहाँ @ शॉन का उत्तर जोड़ा गया:

इन गुणों को अपने बटन के शीर्षकलेबल पर सेट करें।

button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.numberOfLines = 2; // if you want unlimited number of lines put 0

स्विफ्ट 3 और 4:

button.titleLabel?.lineBreakMode = .byWordWrapping
button.titleLabel?.numberOfLines = 2 // if you want unlimited number of lines put 0

IOS के पुराने संस्करण के लिए मूल उत्तर

यदि आप अपने ऊपर पाठ की 2 पंक्तियाँ चाहते हैं, तो आपको उसके ऊपर UIButtonएक अक्षर जोड़ना चाहिए UIlabelजो ठीक यही करता है।

UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(15, 10, frame.size.width-100, 100)];
titleLabel.font = [UIFont boldSystemFontOfSize:24.0];
titleLabel.text = @"This text is very long and should get truncated at the end of the second line";
titleLabel.numberOfLines = 2;
titleLabel.lineBreakMode = UILineBreakModeTailTruncation;
[myButton addSubview:titleLabel]; //add label to button instead.

इंटरफ़ेस बिल्डर समाधान के लिए अद्यतन किया गया

अधिक पूर्ण उत्तर के लिए @Borut Tomazin का उत्तर जोड़ा गया। @Borut Tomazin के उत्तर में सुधार होने के बाद से इस भाग को फिर से अपडेट किया गया।

बिना कोड की आवश्यकता के आप इसे बहुत आसान कर सकते हैं। इंटरफ़ेस बिल्डर Line Breakमें UIButton पर सेट करें Word Wrap। शीर्षक से आप कई पंक्तियों को सम्मिलित कर सकते हैं। Option + Returnनई लाइन बनाने के लिए बस कीज़ को हिट करें। आपको इसे इंटरफ़ेस बिल्डर में उपयोगकर्ता परिभाषित रनटाइम अटेंडेंट में भी जोड़ना होगा:

titleLabel.textAlignment Number [1]

5
UILineBreakModeपदावनत कर रहे हैं, NSLineBreakModeइसके बजाय का उपयोग करें
guillaume

2
यह हाल के iOS संस्करणों की तरह अनावश्यक है। देखिए @ शॉन का जवाब।
cbowns

146

आपको UIButton में UILabel जोड़ने की आवश्यकता नहीं है। यह सिर्फ अतिरिक्त वस्तुओं और काम है।

इन गुणों को अपने बटन के शीर्षकलेबल पर सेट करें।

button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.numberOfLines = 2;//if you want unlimited number of lines put 0

स्विफ्ट:

button.titleLabel!.lineBreakMode = NSLineBreakMode.ByWordWrapping
button.titleLabel!.numberOfLines = 2//if you want unlimited number of lines put 0

6
यह 2013 है और आज के रूप में यह कला समाधान की स्थिति है।
कालस

@ आप दुर्भाग्य से और कोड में यह करने की जरूरत नहीं कर सकते हैं। इस कार्यशीलता का अनुरोध करते हुए Apple के साथ बग रिपोर्ट दर्ज करने लायक हो सकता है।
bpapa

@bpapa हां मैं सहमत हूं, स्टोरीबोर्ड को अधिक लचीला होना चाहिए।
ब्लिप

6
यह मेरे लिए काम करता है, हालांकि यह बटन के डिफ़ॉल्ट व्यवहार को तोड़ता है intrinsicContentSize, जो अभी भी एक ऊंचाई देता है जो पाठ की सिर्फ एक पंक्ति से मेल खाती है। मैंने बटन को ओवरराइड करके इसे ठीक किया intrinsicContentSizeजहां मैंने ऊंचाई निर्धारित की है [self.titleLabel sizeThatFits(CGSizeMake(self.titleLabel.frame.size.width, CGFLOAT_MAX)].height
एलीस

@WillVonUllrich क्योंकि आप केवल स्वीकार किए गए उत्तर को बदल सकते हैं जब इसे संपादित किया जाता है। मैंने इन उत्तरों को स्वीकार किए गए एक से जोड़ा इसलिए यह उन लोगों की मदद करेगा जो आगे नहीं देखते हैं फिर स्वीकृत उत्तर।
टॉटुमस मैक्सिमस

88

बिना कोड की आवश्यकता के आप इसे बहुत आसान कर सकते हैं। इंटरफ़ेस बिल्डर Line Breakमें UIButton पर सेट करें Word Wrap। शीर्षक से आप कई पंक्तियों को सम्मिलित कर सकते हैं। Option + Returnनई लाइन बनाने के लिए बस कीज़ को हिट करें। आपको इसे इंटरफ़ेस बिल्डर में उपयोगकर्ता परिभाषित रनटाइम अटेंडेंट में भी जोड़ना होगा:

titleLabel.textAlignment Number [1]

यह इत्ना आसान है। आशा करता हूँ की ये काम करेगा...


1
सरल मामलों के लिए, वर्तमान में स्वीकृत एक की तुलना में यह समाधान बेहतर (कम ऑब्जेक्ट, कोड) है।
जोनाथन ज़ैन

1
आप ठीक उसी गुणों को सेट करते हैं जैसे आप प्रोग्रामेटिक रूप से करेंगे ताकि आपका तर्क "कम ऑब्जेक्ट्स" अमान्य हो। कोड शायद कम है। लेकिन यह अधिक पठनीय है। अपनी लेने;)
टोटमस मैक्सिमस

ओह, मैं अस्पष्ट था मुझे लगता है। स्पष्ट करने की कोशिश करने के लिए धन्यवाद। इस तथ्य से इतना चिंतित नहीं था कि यह आईबी बनाम कोड में किया जाता है। इस तथ्य से अधिक करने के लिए कि आपको बोरुत के समाधान के साथ एक अतिरिक्त लेबल जोड़ने की आवश्यकता नहीं है, और यह भी एक ही बात को पूरा करता है। लेकिन हां, दोनों ही बेहतरीन काम करते हैं। :)
जोनाथन ज़न

इस तरह के मूल कार्य के लिए कोड के पीछे जाने की जरूरत है।
कर सकते हैं Poyrazoğlu

3
इंटरफ़ेस बिल्डर में titleLabel.textAlignment यूज़र डिफ़ाइंड रनटाइम अटेचमेंट को जोड़कर आप उसी लक्ष्य को 100% तक प्राप्त कर सकते हैं और इसे संख्या = 1 (NSTextAlignmentCenter के मूल्य) पर सेट कर सकते हैं।
0xced

21
 button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;

button.titleLabel.textAlignment = NSTextAlignmentCenter;

[button setTitle: @"Line1\nLine2" forState: UIControlStateNormal];

बिल्कुल सही! आपको NSStringअंदर से विभाजित करने की आवश्यकता नहीं है setTitle। `वर्डवैपिंग`` आपके लिए यह कर रहा है!
एलेक्स Cio

मेरे लिए मुझे सेट शीर्षक के अंदर स्ट्रिंग को विभाजित करना था। इसके बिना यह काम नहीं किया
6:19 बजे user1960169

9

कोड को संपादित करने की आवश्यकता से पूरी तरह से बचने के लिए, और इस तरह से Xcode5 और अधिक से अधिक आप Borut Tomazin सुझाव का पालन कर सकते हैं, अपने विचार को कम करने की आवश्यकता है:

इंटरफ़ेस बिल्डर में (या स्टोरीबोर्ड) वर्ड रैप के लिए लाइन ब्रेक सेट करें। शीर्षक से आप कई पंक्तियों को सम्मिलित कर सकते हैं। नई लाइन बनाने के लिए बस Option+ Returnकुंजियों को हिट करें।

और फिर, यूज़र डिफ़ाइंड रनटाइम अटेचमेंट्स में आप जोड़ सकते हैं

मुख्य पथ: titleLabel.textAlignment
प्रकार: Number
मान:1

ध्यान दें: यह पूरी तरह से "भविष्य का प्रमाण" नहीं हो सकता है क्योंकि हम UITextAlignmentCenterस्थिरांक को इसके संख्यात्मक मान में अनुवाद कर रहे हैं (और यह निरंतरता नए iOS संस्करण जारी होते ही बदल सकती है), लेकिन निकट भविष्य में यह सुरक्षित लगता है।


0

आप स्टोरीबोर्ड से सीधे आवश्यक मूल्य को संशोधित कर सकते हैं। बटन का चयन करें, पहचान निरीक्षक पर जाएं और "उपयोगकर्ता परिभाषित रनटाइम विशेषताओं" अनुभाग में निम्नलिखित कुंजी-मूल्य जोड़ी जोड़ें:

यहाँ छवि विवरण दर्ज करें

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