UIButton छवि + पाठ IOS


129

मैं एक की जरूरत UIButtonके साथ छवि और पाठ । छवि शीर्ष पर होनी चाहिए और पाठ छवि के नीचे आता है दोनों को क्लिक करने योग्य होना चाहिए।


आशा है कि यह मदद करता है, देखें [दोनों TEXT और छवि के साथ UiButton] [1] stackoverflow.com/questions/4926581/… [1]: stackoverflow.com/questions/4926581/ ... आप कस्टमबुट्टन को संभालने के लिए अपने दृष्टिकोण पर एक UITapGestureRecognizer जोड़ सकते हैं। क्लिक करता है।
हुमायूँ ग़नी

22
एक प्रश्न से अधिक आवश्यकता विनिर्देश की तरह लगता है।
अबिज़र्न

देखें स्वीकार किए जाते हैं जवाब और इस commandshift.co.uk/blog/2013/03/12/uibutton-edge-insets UIButton के बारे में किनारों
onmyway133

जवाबों:


308

मुझे बहुत जटिल उत्तर दिखाई देते हैं, वे सभी कोड का उपयोग करते हैं। हालाँकि, यदि आप इंटरफ़ेस बिल्डर का उपयोग कर रहे हैं , तो ऐसा करने का एक बहुत आसान तरीका है:

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

आईबी स्थिति सेट आईबी नियंत्रण सेट

यहां तक ​​कि आप UILabels और UIImages को बनाए बिना अन्य समाधानों के रूप में कोड द्वारा समान दृष्टिकोण का उपयोग कर सकते हैं। हमेशा इसे सरल रखें!

संपादित करें: सही इनसेट के साथ 3 चीजें सेट (शीर्षक, छवि और पृष्ठभूमि) वाले एक छोटे से उदाहरण से जुड़ी बटन पूर्वावलोकन


2
यह सही है। आप शीर्षक और छवि पर किनारे इनसेट का उपयोग करना चाहते हैं ताकि दोनों को सही ढंग से संरेखित किया जा सके। आप इस कोड में titleEdgeInsets और contentEdgeInsets गुण सेट करके कर सकते हैं।
टिम महोनी

4
हां, यह लगभग सही है। बस आपको Backgroundइसके बजाय छवि को सेट करना Imageहोगा, अन्यथा आप शीर्षक शीर्षक को बदलने के लिए इनसेट मान भी सेट नहीं देखेंगे।
holex

6
मुझे इससे भी परेशानी थी। यदि आपका शीर्षक दिखाई नहीं दे रहा है, तो इसके लिए एक नकारात्मक बाएं ऑफसेट सेट करने का प्रयास करें। ऐसा लगता है कि छवि के दाईं ओर IB स्वचालित रूप से इसे बाहर धकेल देता है।
Brians

8
यह केवल छवि और पाठ पक्ष को साथ-साथ प्रदर्शित करता है, है ना? क्या ऊपर से नीचे की ओर उन्मुखीकरण को बदलने का एक तरीका है? यह वही है जो मूल प्रश्न बताता है और जो मैं देख रहा हूं वह भी। धन्यवाद!
फ्लोही

12
Xcode 8 का उपयोग करने वालों के लिए, आप एज प्रॉपर्टी नहीं देख सकते हैं। छवि जोड़ने के बाद पाठ गायब हो सकता है। यह पाठ को सफेद में बदलता है और यदि आप एक सफेद पृष्ठभूमि पर हैं, तो ऐसा लगता है कि यह गायब हो गया है। टेक्स्ट का रंग बदलें और यह छवि के करीब दिखाई देगा। आप आकार निरीक्षक के तहत इनसेट समायोजित कर सकते हैं।
मीका मोंटोया

67

मुझे लगता है कि आप अपनी समस्या के समाधान के लिए देख रहे हैं :

UIButton *_button = [UIButton buttonWithType:UIButtonTypeCustom];
[_button setFrame:CGRectMake(0.f, 0.f, 128.f, 128.f)]; // SET the values for your wishes
[_button setCenter:CGPointMake(128.f, 128.f)]; // SET the values for your wishes
[_button setClipsToBounds:false];
[_button setBackgroundImage:[UIImage imageNamed:@"jquery-mobile-icon.png"] forState:UIControlStateNormal]; // SET the image name for your wishes
[_button setTitle:@"Button" forState:UIControlStateNormal];
[_button.titleLabel setFont:[UIFont systemFontOfSize:24.f]];
[_button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; // SET the colour for your wishes
[_button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted]; // SET the colour for your wishes
[_button setTitleEdgeInsets:UIEdgeInsetsMake(0.f, 0.f, -110.f, 0.f)]; // SET the values for your wishes
[_button addTarget:self action:@selector(buttonTouchedUpInside:) forControlEvents:UIControlEventTouchUpInside]; // you can ADD the action to the button as well like

... बटन के बाकी अनुकूलन अब आपका कर्तव्य है, और बटन को अपने दृश्य में जोड़ना न भूलें।

अद्यतन # 1 और अद्यतन # 2

या, यदि आपको एक डायनामिक बटन की आवश्यकता नहीं है , तो आप इंटरफ़ेस बिल्डर में अपने दृश्य में अपना बटन जोड़ सकते हैं और आप उसी मान को वहां पर भी सेट कर सकते हैं। यह बहुत ही समान है, लेकिन यहां इस संस्करण के साथ-साथ एक साधारण चित्र भी है।

आप इंटरफ़ेस बिल्डर में अंतिम परिणाम भी देख सकते हैं क्योंकि यह स्क्रीनशॉट पर है।

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


EdgeInsets केवल तभी काम करता है जब आपके पास "सेट बटन छवि" हो और जब आप बटन छवि सेट करते हैं तो आप शीर्षक नहीं देख सकते। और अगर आप बैकग्राउंड इमेज सेट करते हैं तो एज आईनेट्स इमेज पर लागू नहीं हो सकते हैं। और आप शीर्षक देख सकते हैं। इसलिए, आप एक ही समय में दोनों को किनारे नहीं कर सकते।
बादल शाह

@BadalShah, हाँ, कुछ परिदृश्य हैं (बटन के आकार, छवि का आकार, शीर्षक की लंबाई, आदि के आधार पर ...) जब आपने जो कहा वह सच है और आप एक ही समय में शीर्षक और छवि नहीं देख सकते क्योंकि छवि दृश्य क्षेत्र के शीर्षक को बाहर निकालता है ; लेकिन यह परिदृश्य सामान्य नहीं है, सामान्य स्थिति यह है कि शीर्षक और छवि दोनों एक ही समय में दिखाई देंगे।
holex

32

Xcode-9 और Xcode-10 Apple ने एज इनसेट के बारे में अभी कुछ बदलाव किए हैं, आप इसे आकार-निरीक्षक के तहत बदल सकते हैं।

कृपया नीचे दिए गए चरणों का पालन करें:

चरण -1: इनपुट पाठ और उस छवि का चयन करें जिसे आप दिखाना चाहते हैं:

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

चरण -2: अपनी आवश्यकता के अनुसार बटन नियंत्रण चुनें जैसा कि नीचे दी गई छवि में दिखाया गया है:

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

चरण -3: अब निरीक्षक के आकार पर जाएं और अपनी आवश्यकता के अनुसार मूल्य जोड़ें:

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


9
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.imageView.image = [UIImage imageNamed:@"your image name here"];
button.titleLabel.text = @"your text here";

लेकिन निम्नलिखित कोड पृष्ठभूमि में ऊपर और छवि पर लेबल दिखाएगा

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.background.image = [UIImage imageNamed:@"your image name here"];
button.titleLabel.text = @"your text here";

समान नियंत्रण में लेबल और बटन का उपयोग करने की आवश्यकता नहीं है क्योंकि UIButton में UILabel और UIimageview गुण हैं।


1
मुझे छवि को शीर्ष पर रखने की आवश्यकता है और छवि के नीचे का पाठ दोनों क्लिक करने योग्य होना चाहिए ..
कोड्सन

4

इस कोड का उपयोग करें:

UIButton *button=[UIButton buttonWithType:UIButtonTypeRoundedRect];
    button.imageView.frame=CGRectMake(0.0f, 0.0f, 50.0f, 44.0f);///You can replace it with your own dimensions.
    UILabel *label=[[UILabel alloc] initWithFrame:CGRectMake(0.0f, 35.0f, 50.0f, 44.0f)];///You can replace it with your own dimensions.
    [button addSubview:label];

4

इस कोड का उपयोग करें:

UIButton *sampleButton = [UIButton buttonWithType:UIButtonTypeCustom];
[sampleButton setFrame:CGRectMake(0, 10, 200, 52)];
[sampleButton setTitle:@"Button Title" forState:UIControlStateNormal];
[sampleButton setFont:[UIFont boldSystemFontOfSize:20]];
[sampleButton setBackgroundImage:[[UIImage imageNamed:@"redButton.png"] 
stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0] forState:UIControlStateNormal];
[sampleButton addTarget:self action:@selector(buttonPressed)
forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:sampleButton]

4

मुझे एक ही समस्या का सामना करना पड़ा, और मैं इसे नीचे के रूप UIButtonमें layoutSubviews:विधि का एक नया उपवर्ग बनाकर और इसे ओवरराइड करके ठीक करता हूं :

-(void)layoutSubviews {
    [super layoutSubviews];

    // Center image
    CGPoint center = self.imageView.center;
    center.x = self.frame.size.width/2;
    center.y = self.imageView.frame.size.height/2;
    self.imageView.center = center;

    //Center text
    CGRect newFrame = [self titleLabel].frame;
    newFrame.origin.x = 0;
    newFrame.origin.y = self.imageView.frame.size.height + 5;
    newFrame.size.width = self.frame.size.width;

    self.titleLabel.frame = newFrame;
    self.titleLabel.textAlignment = UITextAlignmentCenter;

}

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


4

इस दोनों के लिए छवि और पाठ बनाएं UIImageViewऔर UILabelसेट करें .... फिर छवि दृश्य और लेबल पर एक कस्टम बटन रखें ...।

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"search.png"]];
    imageView.frame = CGRectMake(x, y, imageView.frame.size.width, imageView.frame.size.height);
    [self.view addSubview:imageView];

UILabel *yourLabel = [[UILabel alloc] initWithFrame:CGRectMake(x, y,a,b)];
yourLabel.text = @"raj";
[self.view addSubview:yourLabel];

UIButton * yourBtn=[UIButton buttonWithType:UIButtonTypeCustom];
[yourBtn setFrame:CGRectMake(x, y,c,d)];
[yourBtn addTarget:self action:@selector(@"Your Action") forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:yourBtn];  

सरल और उपयोगी। हाइलाइट की गई छवि और शीर्षक कैसे सेट करें?
डॉनसॉन्ग

के लिए lable setHighlightedTextColor और आपको forControlEvents के साथ खेलना होगा
Rajneesh071

3

आपको पाठ के लिए छवि और कस्टम लेबल के लिए कस्टम इमेजव्यू बनाना चाहिए और आप अपने बटन को साक्षात्कार के रूप में जोड़ सकते हैं। बस।

UIButton *yourButton = [UIButton buttonWithType:UIButtonTypeCustom];
yourButton.backgroundColor = [UIColor greenColor];
yourButton.frame = CGRectMake(140, 40, 175, 30);     
[yourButton addTarget:self action:@selector(yourButtonSelected:) forControlEvents:UIControlEventTouchUpInside]; 
[self.view addSubview:yourButton];

UIImageView *imageView1 = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, yourButton.frame.size.width, yourButton.frame.size.height/2)];
imageView1.image =[UIImage imageNamed:@"images.jpg"];
[yourButton addSubview:imageView1];

UILabel *label=[[UILabel alloc] initWithFrame:CGRectMake(0, yourButton.frame.size.height/2, yourButton.frame.size.width, yourButton.frame.size.height/2)];
label.backgroundColor = [UIColor greenColor];
label.textAlignment= UITextAlignmentCenter;
label.text = @"ButtonTitle";
[yourButton addSubview:label];

परीक्षण उद्देश्य के लिए, yourButtonSelected:विधि का उपयोग करें

-(void)yourButtonSelected:(id)sender{
    NSLog(@"Your Button Selected");

}

मुझे लगता है कि यह आपके लिए मददगार होगा।


3

यह वास्तव में सरल है, बस आप बटन की पृष्ठभूमि में छवि जोड़ सकते हैं और uicontrolstatenormal के लिए बटन के टाइटलबेल को टेक्स्ट दे सकते हैं। बस।

[btn setBackgroundImage:[UIImage imageNamed:@"img.png"] forState:UIControlStateNormal];
[btn setContentVerticalAlignment:UIControlContentVerticalAlignmentBottom];
[btn setTitle:@"Click Me" forState:UIControlStateNormal];

4
... और पाठ छवि के नीचे कैसे जाता है?
holex

@होलेक्स: मुझे निर्देशित करने के लिए बहुत-बहुत धन्यवाद, मुझे इसमें दोष मिला और फिर उसी के अनुसार बदल गया।
ध्रुव

1

स्विफ्ट संस्करण:

var button = UIButton()

newGameButton.setTitle("Новая игра", for: .normal)
newGameButton.setImage(UIImage(named: "energi"), for: .normal)
newGameButton.backgroundColor = .blue
newGameButton.imageEdgeInsets.left = -50

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

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