दिलचस्प पोस्ट
एक चयन सूची में शब्द लपेटें विकल्प JFrame स्थानों को स्थापित करने के लिए सर्वश्रेष्ठ अभ्यास Mercurial और Git के बीच अंतर क्या है? BackgroundWorker में अप्रतिबंधित अपवाद एचटीएमएल में इनपुट और पाठ इनपुट का चयन करें – समान चौड़ाई बनाने का सबसे अच्छा तरीका? पीपी और वर्चुअलएएनव प्रणाली को स्थापित करने का आधिकारिक "पसंदीदा" तरीका क्या है? क्या सी # में एक JSON वेब टोकन (जेडब्ल्यूटी) उदाहरण है? उद्देश्य-सी: फॉरवर्ड क्लास डिक्लेरेशन क्या मैं बस एक फाइल पढ़ सकता हूं जो प्रयोग में है? आइवी के साथ निर्भरता प्रतिलिपि कैसे टालना मैं एडीबी के साथ एंड्रॉइड से कनेक्ट कैसे कर सकता हूं? अगर रीडायरेक्शन होता है तो फाइल_गेट_कंटेंट के बाद वास्तविक यूआरएल कैसे प्राप्त करें? रीयलटाइम टाइम्सरीज डेटा में पीक सिग्नल का पता लगाने सी ++ सॉकेट सर्वर – सीपीयू को पूर्ण करने में असमर्थ क्लासपाथ में सभी वर्गों को प्राप्त करें

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

मेरे पास निम्न कोड है …

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

… यह विचार किया जा रहा है कि मुझे बटन के लिए बहु-पंक्ति पाठ प्राप्त हो सकता है, लेकिन पाठ हमेशा पृष्ठभूमि से छिपा हुआ है UIButton की छवि बटन के उप-दृश्य दिखाने के लिए एक लॉगिंग कॉल से पता चलता है कि UILabel को जोड़ा गया है, लेकिन पाठ स्वयं नहीं देखा जा सकता है। क्या यह UIButton में एक बग है या मैं कुछ गलत कर रहा हूँ?

वेब के समाधान से एकत्रित समाधान "आप एक UIButton में बहु-पंक्ति पाठ कैसे जोड़ सकते हैं?"

IOS 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]; 

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

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

IOS 9 फ़ॉरवर्ड के लिए ,

आम तौर पर, बस "एटिटेडटेड टेक्स्ट" का चयन करें और फिर "कैरेक्टर रैप" (या जो भी वरीयता वाला विकल्प) चुनें।

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

पिक

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

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

जैसा

 UILineBreakModeWordWrap and UITextAlignmentCenter 

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

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

[ यहाँ ]

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

 button.titleLabel?.numberOfLines = 0 

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

 someButton.lineBreakMode = UILineBreakModeWordWrap; 

(IOS 3 और बाद के संस्करण के लिए संपादित करें)

 someButton.titleLabel.lineBreakMode = UILineBreakModeWordWrap; 

स्विफ्ट 3

 button.titleLabel?.lineBreakMode = .byWordWrapping button.titleLabel?.textAlignment = .center button.setTitle("Button\nTitle",for: .normal) 

Autolayout के साथ IOS7 पर वाम संरेखित करें:

 button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; button.titleLabel.textAlignment = NSTextAlignmentLeft; button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; 

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

आपके उदाहरण के साथ समस्या यह है कि आपको lineBreakMode के lineBreakMode संपत्ति को अपने डिफ़ॉल्ट मान 1 के अलावा अन्य किसी चीज़ पर सेट करना होगा। आपको lineBreakMode गुण की समीक्षा करना चाहिए।

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

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

दूसरी ओर, यूआईएलएबल के साथ UIButton के उपवृत्त के रूप में, मुझे यह पता है कि स्पर्श इवेंट को हमेशा UILabel के पर्यवेक्षण के लिए प्रचारित किया जाएगा।

मैंने इस दृष्टिकोण को लिया और पृष्ठभूमि की छवि के साथ की गई किसी भी समस्या को ध्यान नहीं दिया। मैंने इस कोड को -इटलॉगरेक्टरेक कंटेंट में जोड़ दिया है: UIButton subclass की लेकिन कोड को UIButton पर्यवेक्षण की नियमितता को ड्राइंग में भी रखा जा सकता है, जो उस स्थिति में आप 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 subclass डाउनलोड कर सकते हैं।

यहां दिए गए उत्तर आपको बताते हैं कि कैसे multiline बटन शीर्षक प्रोग्राम को प्राप्त करना है

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

HTH

यदि आप iOS 6 पर ऑटो-लेआउट का उपयोग करते हैं, तो आपको preferredMaxLayoutWidth प्रॉपर्टी सेट करने की भी आवश्यकता हो सकती है:

 button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; button.titleLabel.textAlignment = NSTextAlignmentCenter; button.titleLabel.preferredMaxLayoutWidth = button.frame.size.width; 

लाइनब्रेकमोडा सेट करना एनएसएलइनब्रैकबीयर्ड रैपिंग (आईबी या कोड में) बटन लेबल को बहुरेखित करता है, लेकिन बटन के फ्रेम को प्रभावित नहीं करता है

यदि बटन में गतिशील शीर्षक है, तो एक चाल है: एक ही फ़ॉन्ट के साथ छिपी हुई यूआईएलबल को डालें और लेआउट के साथ बटन की ऊंचाई तक टाई; जब पाठ को बटन और लेबल और आटोलेआऊट सेट करते हैं, तो सभी काम करेंगे

ध्यान दें

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

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

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

 <string><![CDATA[Line1 Line2]]></string> 

यदि आप स्वत: लेआउट का उपयोग करते हैं

 button.titleLabel?.adjustsFontSizeToFitWidth = true button.titleLabel?.numberOfLines = 2 
 self.btnError.titleLabel?.lineBreakMode = NSLineBreakMode.byWordWrapping self.btnError.titleLabel?.textAlignment = .center self.btnError.setTitle("Title", for: .normal) 

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

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

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

 [button.superview addSubview:myLabel]; myLabel.center = button.center;