कैसे आप एक UIButton के लिए बहु-पंक्ति पाठ जोड़ सकता हूँ?

वोट
313

मैं निम्नलिखित कोड है ...

UILabel *buttonLabel = [[UILabel alloc] initWithFrame:targetButton.bounds];
buttonLabel.text = @Long text string;
[targetButton addSubview:buttonLabel];
[targetButton bringSubviewToFront:buttonLabel];

... विचार किया जा रहा मैं बटन के लिए बहु लाइन पाठ हो सकता है, लेकिन पाठ हमेशा UIButton की backgroundImage से बाधित है। बटन के subviews को दिखाने के लिए एक प्रवेश कॉल से पता चलता है कि UILabel जोड़ दिया गया है, लेकिन पाठ में ही नहीं देखा जा सकता। इस UIButton में एक बग या कुछ गलत मैं कर रहा हूँ है?

03/03/2009 को 01:22
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


26 जवाब

वोट
618

आईओएस 6 के लिए और इसके बाद के संस्करण, कई पंक्तियों अनुमति देने के लिए निम्नलिखित का उपयोग करें:

button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
// you probably want to center it
button.titleLabel.textAlignment = NSTextAlignmentCenter; // if you want to 
[button setTitle: @"Line1\nLine2" forState: UIControlStateNormal];

iOS 5 के लिए और उपयोग निम्नलिखित नीचे कई पंक्तियों अनुमति देने के लिए:

button.titleLabel.lineBreakMode = UILineBreakModeWordWrap;
// you probably want to center it
button.titleLabel.textAlignment = UITextAlignmentCenter;
[button setTitle: @"Line1\nLine2" forState: UIControlStateNormal];

2017, iOS9 आगे के लिए ,

आम तौर पर, बस इन दो बातें:

  1. चुनें "जिम्मेदार ठहराया पाठ"
  2. "रेखा तोड़" पॉपअप पर चयन "वर्ड लपेटें"
01/12/2009 को 23:34
का स्रोत उपयोगकर्ता

वोट
114

चयनित जवाब सही है, लेकिन आप इंटरफ़ेस बिल्डर में बात की इस तरह करना पसंद करता है, तो आप ऐसा कर सकते हैं:

पिक

14/05/2014 को 16:36
का स्रोत उपयोगकर्ता

वोट
53

आईओएस 6 के लिए:

button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.textAlignment = NSTextAlignmentCenter;

जैसा

UILineBreakModeWordWrap and UITextAlignmentCenter

आईओएस 6 के बाद में पदावनत कर रहे हैं ..

08/10/2012 को 08:14
का स्रोत उपयोगकर्ता

वोट
41

आप शीर्षक कई पंक्तियों के साथ केंद्रित के साथ एक बटन जोड़ने के लिए चाहते हैं, तो बटन के लिए अपने इंटरफेस बिल्डर की सेटिंग सेट करें:

[ यहाँ]

21/10/2015 को 09:03
का स्रोत उपयोगकर्ता

वोट
28

रोजर नोलन के सुझाव को फिर से करने के लिए, लेकिन स्पष्ट कोड के साथ, यह सामान्य समाधान है:

button.titleLabel?.numberOfLines = 0
28/10/2010 को 16:45
का स्रोत उपयोगकर्ता

वोट
17

स्विफ्ट 3

button.titleLabel?.lineBreakMode = .byWordWrapping
button.titleLabel?.textAlignment = .center  
button.setTitle("Button\nTitle",for: .normal)
08/05/2017 को 09:56
का स्रोत उपयोगकर्ता

वोट
10

एक बहुत ही आसान तरीका है:

someButton.lineBreakMode = UILineBreakModeWordWrap;

(आईओएस 3 और उसके बाद के लिए संपादित करें :)

someButton.titleLabel.lineBreakMode = UILineBreakModeWordWrap;
25/10/2009 को 20:48
का स्रोत उपयोगकर्ता

वोट
9

autolayout साथ iOS7 पर बाएं से संरेखित करें:

button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.textAlignment = NSTextAlignmentLeft;
button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
28/06/2013 को 20:07
का स्रोत उपयोगकर्ता

वोट
7

सबसे पहले, जैसा कि आप जानते UIButton पहले से ही इसके अंदर एक UILabel है कि होना चाहिए। आप का उपयोग कर सेट कर सकते हैं –setTitle:forState:

अपने उदाहरण के साथ समस्या यह आप UILabel के निर्धारित करने की आवश्यकता है कि है numberOfLines1. तुम भी समीक्षा करनी चाहिए की उसके डिफ़ॉल्ट मान के अलावा कुछ करने के लिए संपत्ति lineBreakModeसंपत्ति।

03/03/2009 को 09:35
का स्रोत उपयोगकर्ता

वोट
4

जवाब यहाँ आपको बता प्रोग्राम बहु बटन शीर्षक प्राप्त करने के लिए।

मैं बस को जोड़ने के लिए है कि अगर आप स्टोरीबोर्ड का उपयोग कर रहे हैं, तो आप टाइप कर सकते हैं चाहता था [Ctrl + Enter] एक बटन शीर्षक मैदान पर एक नई पंक्ति के लिए मजबूर करने।

HTH

01/05/2013 को 10:50
का स्रोत उपयोगकर्ता

वोट
4

जो लोग Xcode 4 की स्टोरीबोर्ड का उपयोग कर रहे के लिए, आप बटन पर क्लिक कर सकते हैं, और सही पक्ष पर उपयोगिताएँ तहत गुण निरीक्षक, आप लाइन ब्रेक के लिए एक विकल्प दिखाई देगा फलक। वर्ड लपेटें चुनें, और तुम जाना अच्छा होना चाहिए।

09/05/2012 को 19:12
का स्रोत उपयोगकर्ता

वोट
3

भाई दृश्य के रूप में शीर्षक UILabel डालने की ब्रेंट के विचार के रूप में, यह एक बहुत अच्छा विचार की तरह मुझे नहीं लगता है। मैं UIButton के दृष्टिकोण के माध्यम से नहीं मिल रहा है अपने स्पर्श घटनाओं के कारण UILabel के साथ बातचीत की समस्याओं में सोच रखने के लिए।

दूसरी ओर, UIButton की subview के रूप में एक UILabel के साथ, मैं बहुत आरामदायक जानते हुए भी कि स्पर्श इवेंट हमेशा UILabel के superview को प्रचारित किया जाएगा हूँ।

मैं इस दृष्टिकोण लिया और समस्याओं backgroundImage साथ रिपोर्ट किए गए किसी भी नोटिस नहीं किया था। मैं -titleRectForContentRect में इस कोड को कहा: एक UIButton उपवर्ग की लेकिन कोड भी UIButton superview, जो उस मामले में आप UIButton के चर के साथ स्वयं के सभी संदर्भ प्रतिस्थापन करेंगी दिनचर्या ड्राइंग में रखा जा सकता है।

#define TITLE_LABEL_TAG 1234

- (CGRect)titleRectForContentRect:(CGRect)rect
{   
    // define the desired title inset margins based on the whole rect and its padding
    UIEdgeInsets padding = [self titleEdgeInsets];
    CGRect titleRect = CGRectMake(rect.origin.x    + padding.left, 
                                  rect.origin.x    + padding.top, 
                                  rect.size.width  - (padding.right + padding.left), 
                                  rect.size.height - (padding.bottom + padding].top));

    // save the current title view appearance
    NSString *title = [self currentTitle];
    UIColor  *titleColor = [self currentTitleColor];
    UIColor  *titleShadowColor = [self currentTitleShadowColor];

    // we only want to add our custom label once; only 1st pass shall return nil
    UILabel  *titleLabel = (UILabel*)[self viewWithTag:TITLE_LABEL_TAG];


    if (!titleLabel) 
    {
        // no custom label found (1st pass), we will be creating & adding it as subview
        titleLabel = [[UILabel alloc] initWithFrame:titleRect];
        [titleLabel setTag:TITLE_LABEL_TAG];

        // make it multi-line
        [titleLabel setNumberOfLines:0];
        [titleLabel setLineBreakMode:UILineBreakModeWordWrap];

        // title appearance setup; be at will to modify
        [titleLabel setBackgroundColor:[UIColor clearColor]];
        [titleLabel setFont:[self font]];
        [titleLabel setShadowOffset:CGSizeMake(0, 1)];
        [titleLabel setTextAlignment:UITextAlignmentCenter];

        [self addSubview:titleLabel];
        [titleLabel release];
    }

    // finally, put our label in original title view's state
    [titleLabel setText:title];
    [titleLabel setTextColor:titleColor];
    [titleLabel setShadowColor:titleShadowColor];

    // and return empty rect so that the original title view is hidden
    return CGRectZero;
}

मैं समय लेने के लिए किया था और इस बारे में कुछ और लिखा था यहां । वहाँ, मैं भी एक छोटा समाधान बात है, हालांकि यह काफी सभी स्थितियों से मेल नहीं खाती और कुछ निजी विचारों हैकिंग शामिल है। इसके अलावा, आप एक UIButton उपवर्ग तैयार प्रयोग की जाने वाली डाउनलोड कर सकते हैं।

09/03/2009 को 15:25
का स्रोत उपयोगकर्ता

वोट
2

आप इस कोड को जोड़ना है:

buttonLabel.titleLabel.numberOfLines = 0;
21/02/2018 को 11:41
का स्रोत उपयोगकर्ता

वोट
2

यदि आप ऑटो-लेआउट का उपयोग करते हैं।

button.titleLabel?.adjustsFontSizeToFitWidth = true
button.titleLabel?.numberOfLines = 2
09/12/2016 को 10:55
का स्रोत उपयोगकर्ता

वोट
2

NSLineBreakByWordWrapping को lineBreakMode स्थापना (या तो आईबी या कोड में) बटन लेबल बहु करता है, लेकिन बटन के फ्रेम को प्रभावित नहीं करता।

बटन गतिशील शीर्षक है, तो वहाँ एक चाल है: एक ही फॉन्ट के साथ छिपा UILabel रख दिया और टाई यह लेआउट के साथ बटन की ऊंचाई करने के लिए ऊंचाई है, बटन और लेबल और autolayout के लिए पाठ जब सेट सब काम कर देगा।

ध्यान दें

एक पंक्ति का बटन के आंतरिक आकार ऊंचाई इतनी लेबल की ऊंचाई हटना यह खड़ी सामग्री गले लगाना प्राथमिकता बटन के लम्बवत सामग्री संपीड़न प्रतिरोध से अधिक होना चाहिए है को रोकने के लिए लेबल की तुलना में बड़ा है,।

31/08/2015 को 20:21
का स्रोत उपयोगकर्ता

वोट
2

आप IOS 6 पर स्वत: लेआउट का उपयोग करते हैं तो आप भी स्थापित करने के लिए आवश्यकता हो सकती है preferredMaxLayoutWidthसंपत्ति:

button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.textAlignment = NSTextAlignmentCenter;
button.titleLabel.preferredMaxLayoutWidth = button.frame.size.width;
01/05/2013 को 19:45
का स्रोत उपयोगकर्ता

वोट
2

यह पूरी तरह से काम करता है।

Plist तरह कॉन्फ़िग फ़ाइल के साथ इस का उपयोग करने के जोड़े, आप CDATA उपयोग करने के लिए, multilined शीर्षक लिखने के लिए इस तरह की जरूरत है:

<string><![CDATA[Line1
Line2]]></string>
11/05/2011 को 11:04
का स्रोत उपयोगकर्ता

वोट
1
self.btnError.titleLabel?.lineBreakMode = NSLineBreakMode.byWordWrapping

self.btnError.titleLabel?.textAlignment = .center

self.btnError.setTitle("Title", for: .normal)
03/08/2017 को 09:40
का स्रोत उपयोगकर्ता

वोट
0

में स्विफ्ट 5.0 और Xcode 10.2

SharedClass उदाहरण एक बार लिख सकते हैं और हर बर्तन का उपयोग

यह आपके साझा वर्ग है (इस तरह आप सभी घटकों के गुण का उपयोग करें)

import UIKit

class SharedClass: NSObject {

     static let sharedInstance = SharedClass()

     private override init() {

     }
  }

//UIButton extension
extension UIButton {
     //UIButton properties
     func btnMultipleLines() {
         titleLabel?.numberOfLines = 0
         titleLabel?.lineBreakMode = .byWordWrapping
         titleLabel?.textAlignment = .center        
     }
}

अपने में ViewController इस तरह कॉल

button.btnMultipleLines()//This is your button
29/04/2019 को 07:54
का स्रोत उपयोगकर्ता

वोट
0

मैं ऑटो लेआउट के साथ एक समस्या हुई, बहु लाइन परिणाम इस तरह था सक्षम करने के बाद: इसलिए आकार बटन आकार को प्रभावित नहीं करता मैं जोड़ दिया है के आधार पर इस मामले contentEdgeInsets में 10, 10, 10, 10 (था ( ) बुला के बाद : आशा है कि यह आप (स्विफ्ट 5.0 मदद):
यहाँ छवि विवरण दर्ज
titleLabel
ConstraintscontentEdgeInsets
makeMultiLineSupport()
यहाँ छवि विवरण दर्ज

extension UIButton {

    func makeMultiLineSupport() {
        guard let titleLabel = titleLabel else {
            return
        }
        titleLabel.numberOfLines = 0
        titleLabel.setContentHuggingPriority(.required, for: .vertical)
        titleLabel.setContentHuggingPriority(.required, for: .horizontal)
        addConstraints([
            .init(item: titleLabel,
                  attribute: .top,
                  relatedBy: .greaterThanOrEqual,
                  toItem: self,
                  attribute: .top,
                  multiplier: 1.0,
                  constant: contentEdgeInsets.top),
            .init(item: titleLabel,
                  attribute: .bottom,
                  relatedBy: .greaterThanOrEqual,
                  toItem: self,
                  attribute: .bottom,
                  multiplier: 1.0,
                  constant: contentEdgeInsets.bottom),
            .init(item: titleLabel,
                  attribute: .left,
                  relatedBy: .greaterThanOrEqual,
                  toItem: self,
                  attribute: .left,
                  multiplier: 1.0,
                  constant: contentEdgeInsets.left),
            .init(item: titleLabel,
                  attribute: .right,
                  relatedBy: .greaterThanOrEqual,
                  toItem: self,
                  attribute: .right,
                  multiplier: 1.0,
                  constant: contentEdgeInsets.right)
            ])
    }

}
11/04/2019 को 21:25
का स्रोत उपयोगकर्ता

वोट
0

इन दिनों, यदि आप वास्तव में बात यह है कि इस तरह की जरूरत है एक मामला-दर-मामला आधार पर इंटरफ़ेस बिल्डर में पहुंच योग्य है, आप इसे इस तरह एक सरल विस्तार के साथ क्या कर सकते हैं:

extension UIButton {
    @IBInspectable var numberOfLines: Int {
        get { return titleLabel?.numberOfLines ?? 1 }
        set { titleLabel?.numberOfLines = newValue }
    }
}

तो फिर तुम बस किसी भी UIButton या UIButton उपवर्ग पर एक विशेषता के रूप में numberOfLines सेट कर सकते हैं जैसे कि यह एक लेबल थे। एक ही तरह के एक दृश्य की परत की कोण त्रिज्या या छाया है कि यह डाले की विशेषताओं के रूप में अन्य आमतौर पर-दुर्गम मूल्यों, की एक पूरी मेजबान के लिए चला जाता है।

17/11/2018 को 07:12
का स्रोत उपयोगकर्ता

वोट
0

Xcode 9.3 में आप इसे का उपयोग करके कर सकते स्टोरीबोर्ड नीचे की तरह,

enter image description here

आप केंद्र के लिए बटन शीर्षक textAlignment निर्धारित करने की आवश्यकता

button.titleLabel?.textAlignment = .center

आप नीचे की तरह साथ नई लाइन (\ N) शीर्षक पाठ सेट करने के लिए की जरूरत नहीं है

button.setTitle("Good\nAnswer",for: .normal)

सीधे शब्दों में शीर्षक सेट,

button.setTitle("Good Answer",for: .normal)

यहाँ परिणाम है,

enter image description here

31/05/2018 को 06:14
का स्रोत उपयोगकर्ता

वोट
0

मैं शामिल jessecurry के जवाब भीतर STAButton जो मेरे का हिस्सा है STAControls खुला स्रोत पुस्तकालय। मैं वर्तमान में क्षुधा मैं विकासशील हूँ में से एक के भीतर इसका इस्तेमाल और यह मेरी जरूरतों के लिए काम करता है। इसमें कैसे सुधार कर या मुझे अनुरोध खींच भेजने के लिए पर मुद्दों को खोलने के लिए स्वतंत्र महसूस।

05/05/2018 को 23:27
का स्रोत उपयोगकर्ता

वोट
0

तेजी से 4.0

btn.titleLabel?.lineBreakMode = .byWordWrapping
btn.titleLabel?.textAlignment = .center
btn.setTitle( "Line1\nLine2", for: .normal)
25/03/2018 को 12:50
का स्रोत उपयोगकर्ता

वोट
0

अपने खुद के बटन वर्ग रोल। यह कहीं लंबे समय में सबसे अच्छा समाधान द्वारा है। UIButton और अन्य UIKit कक्षाएं आप उन्हें कैसे अनुकूलित कर सकते हैं में बहुत ही सीमित हैं।

10/03/2009 को 14:16
का स्रोत उपयोगकर्ता

वोट
-3

यद्यपि यह एक नियंत्रित करने के लिए एक subview जोड़ने के लिए ठीक है, तो कोई गारंटी नहीं यह वास्तव में काम करता हूँ, क्योंकि नियंत्रण यह वहाँ होने की उम्मीद नहीं कर सकते हैं और इस तरह खराब व्यवहार करते हैं हो सकता है। आप इसके साथ दूर मिल सकता है, बस बटन के एक भाई दृश्य के रूप में लेबल जोड़ सकते हैं और इसके फ्रेम सेट इतना है कि यह बटन overlaps; जब तक यह बटन के शीर्ष पर प्रदर्शित करने के लिए सेट कर रहा है, कुछ भी नहीं कर सकते हैं बटन इसे अस्पष्ट होगा।

दूसरे शब्दों में:

[button.superview addSubview:myLabel];
myLabel.center = button.center;
03/03/2009 को 13:04
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more