UIButton: चयनित-हाइलाइट किए गए राज्य के लिए सेट छवि


158

मैंने बटन के राज्यों के लिए एक चित्र सेट किया है सामान्य, हाइलाइट और चयनित, लेकिन जब चयनित राज्य में बटन और मैं इसे दबाता / हाइलाइट करता हूं तो मैंने अपनी हाइलाइट की गई छवि को नहीं देखा, लेकिन सिर्फ ग्रे तस्वीर। क्या बटन चयनित होने पर हाइलाइटेड स्थिति के लिए एक छवि सेट करना संभव है?

मेरा कोड:

[button setImage:[UIImage imageNamed:@"normal.png"] forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateHighlighted];
[button setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateSelected];

जब मैं करता हूं:

[button setSelected:YES];

और बटन दबाएं, "दबाया गया। पीएनजी" छवि का चयन नहीं करता है।


+1 मुझे एक ही समस्या है, आशा है कि उत्तर होंगे।
निक वीवर

3
प्रतिभाशाली! कौन जानता होगा कि आप संयोजन के लिए चित्र सेट कर सकते हैं! मेरे लिए एक जादू की तरह काम किया!
डेविड एच।

1
बहुत बढ़िया!!! आपका सवाल ही मेरे लिए जवाब है ... यह काम किया !!!
किरण एस

1
यह मेरे लिए सिर्फ UIControlStateHighlighted के साथ काम करता है, लेकिन मैं button.adjustsImageWhenHighlighted = NO;पहले कॉल करता हूं ।
ग्राहम पर्क्स

यह। मेरे पास पहले जो समाधान था उससे बहुत बेहतर।
मशक

जवाबों:


231

मुझे समाधान मिला: अतिरिक्त लाइन जोड़ने की आवश्यकता है

[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateSelected | UIControlStateHighlighted];

5
इंटरफ़ेस बिल्डर के माध्यम से ऐसा करने का कोई तरीका?
स्टीफन

6
@stephen: "StateConfig" की विभिन्न स्थितियों के लिए UIButton की "पृष्ठभूमि" (छवि) संपत्ति सेट करना (डिफ़ॉल्ट / हाइलाइटेड / चयनित / अक्षम) संपत्ति मेरे लिए काम करती है।
अजित

2
अजीत का हल मेरे काम नहीं आया। मैं आईबी पर भी ऐसा करने का एक तरीका जानना चाहता हूं
लुकास

3
चूँकि आप इसे IB में सेट नहीं कर सकते हैं, आप इसे अपने viewDidLoad विधि में रख सकते हैं, और यह लगभग उतना ही अच्छा होगा, क्योंकि आप IB में छवि को बदल सकते हैं और हमेशा मैच के लिए कोड को अपडेट करने के बारे में चिंता करने की ज़रूरत नहीं है। [बटन setImage: [बटन छविफॉरस्टेट: UIControlStateHighlighted] forState: UIControlStateSelected | UIControlStateHighlighted];
डेव वुड

4
आप आईबी में ऐसा कर सकते हैं। नीचे दिए गए उत्तर में स्क्रीनशॉट देखें!
रिओमायर

121

इसे आप इंटरफ़ेस बिल्डर में कर सकते हैं।

फिर UIButtonआप जिस सेटिंग में IBजाना चाहते हैं उसे चुनें attributes inspector

स्क्रीन शॉट्स में, मैं एक कस्टम बटन प्रकार का उपयोग कर रहा हूं, लेकिन इससे कोई फर्क नहीं पड़ता।

सीमा शुल्क भुगतान में चूक

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

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


5
कस्टम या सिस्टम वास्तव में बहुत मायने रखता है। दोनों के साथ खेलते हैं और आप देखेंगे।
बेन सिनक्लेयर

9
प्रश्न के संदर्भ में नहीं।
रिओमायर

7
इस सवाल का जवाब नहीं है। उनका कहना है कि हाइलाइटेड + चयनित राज्य का संयोजन
राफेल नोब्रे

+1 क्योंकि मैं पूरी तरह से इन पुल डाउन मेनू से चूक गया था (मैं काफी समय पहले तक सब कुछ प्रोग्रामेटिक रूप से करता था ...)
निकोलस मियारी

30

स्विफ्ट 3

// Default state (previously `.Normal`)
button.setImage(UIImage(named: "image1"), for: [])

// Highlighted
button.setImage(UIImage(named: "image2"), for: .highlighted)

// Selected
button.setImage(UIImage(named: "image3"), for: .selected)

// Selected + Highlighted
button.setImage(UIImage(named: "image4"), for: [.selected, .highlighted])

पृष्ठभूमि छवि सेट करने के लिए हम उपयोग कर सकते हैं setBackgroundImage(_:for:)

स्विफ्ट 2.x

// Normal
button.setImage(UIImage(named: "image1"), forState: .Normal)

// Highlighted
button.setImage(UIImage(named: "image2"), forState: .Highlighted)

// Selected
button.setImage(UIImage(named: "image3"), forState: .Selected)

// Selected + Highlighted
button.setImage(UIImage(named: "image4"), forState: [.Selected, .Highlighted])

सरणी संस्करण मेरे लिए काम नहीं किया। (कम से कम दौरान setImage)
होगी

1
iOS 10 आपकी सामान्य / चयनित छवियों को मंद कर देगा, जो अच्छा है और अच्छा लग रहा है। यदि आप एक चयनित, हाइलाइट की गई छवि सेट करते हैं, तो यह स्वचालित रूप से उत्तरार्द्ध को मंद नहीं करेगा। जो एक बमर है।
सांपला

28

मुझे लगता है कि यहां ज्यादातर पोस्टर पूरी तरह से याद आते हैं। मुझे भी यही समस्या थी। मूल प्रश्न एक चयनित बटन (COMBINING BOTH STATES) के हाइलाइट किए गए राज्य के बारे में था, जो IB में सेट नहीं किया जा सकता है और कुछ काला होने के साथ डिफ़ॉल्ट स्थिति में वापस आ जाता है। केवल एक पोस्ट के रूप में काम कर समाधान:

[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateSelected | UIControlStateHighlighted];

मुझे पता है, लेकिन मुझे किसी तरह की अनुमति नहीं थी
अल्गनोर

1
किसी कारण के लिए मुझे अभी भी मुद्दा मिलता है, भले ही मैंने इसे ऊपर सेट किया हो। मेरे नियंत्रण राज्य के लिए एक कस्टम छवि प्राप्त करने का एकमात्र तरीका केवल UIControlStateHighlighted सेट करना है।
जूलियस १

12

यदि आपके पास ऐसा करने का एक अच्छा कारण है, तो यह चाल चलेगा

इन लक्ष्यों को जोड़ें:

[button addTarget:self action:@selector(buttonTouchDown:) forControlEvents:UIControlEventTouchDown];
[button addTarget:self action:@selector(buttonTouchUp:) forControlEvents:UIControlEventTouchUpInside];


-(void)buttonTouchDown:(id)sender{
    UIButton *button=(UIButton *)sender;
    if(button.selected){
        [button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateNormal];
    }
}

-(void)buttonTouchUp:(id)sender{
    UIButton *button=(UIButton *)sender;
    [button setImage:[UIImage imageNamed:@"normal.png"] forState:UIControlStateNormal];
}

इसके लिए धन्यवाद, लेकिन वास्तव में यह बहुत जटिल है) मुझे उम्मीद है कि बटन ऊपर वर्णित के रूप में काम करेगा
user478681

7

स्विफ्ट 3.x में, आप हाइलाइट की गई छवि को सेट कर सकते हैं जब बटन निम्नलिखित तरीके से चुना जाता है:

// Normal state
button.setImage(UIImage(named: "normalImage"), for: .normal) 

// Highlighted state (before button is selected)
button.setImage(UIImage(named: "pressedImage"), for: .highlighted)

// Selected state
button.setImage(UIImage(named: "selectedImage"), for:  .selected)

// Highlighted state (after button is selected)
button.setImage(UIImage(named: "pressedAfterBeingSelectedImage"), 
                for:  UIControlState.selected.union(.highlighted))


2

अगर मैं ग़लत हूं तो मेरी गलती सुझाएं। ऐसा करके

   [button setSelected:YES];

आप स्पष्ट रूप से चयनित के रूप में बटन की स्थिति बदल रहे हैं। तो स्वाभाविक रूप से कोड द्वारा आपने छवि प्रदान की है जो आपके मामले में चयनित स्थिति के लिए जाँच करेगा। पीएनजी


पूरी तरह से समझ में नहीं आ रहा है कि "राज्य को बदलने की मंजूरी ..." से आपका क्या मतलब है। यह बहुत सरल है: मैं ऊपर वर्णित राज्यों के लिए चित्र सेट करता हूं, इस बटन के लिए लक्ष्य-क्रिया जोड़ें और मेरी क्रिया को संसाधित करने वाली विधि (नियंत्रण घटना UIControlEventTouchUpInside) मैं बटन के लिए चयनित राज्य को चालू करता हूं [बटन सेट किया हुआ: YES / NO]। और जब बटन वर्तमान में चयनित स्थिति में है और मैं इसे दबा / हाइलाइट करता हूं, तो मुझे केवल ग्रे छवि दिखाई देती है, जैसे कि इस राज्य के लिए कोई छवि सेटअप नहीं था।
user478681

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

जब मैं बटन दबाता हूं, तो मैं इसे हाइलाइट किए गए के रूप में बताता हूं और फिर जब मैं इसे जारी करता हूं, तो राज्य का चयन किया जाएगा (जैसा कि मैंने इसे अपनी आधिकारिक विधि में सेट किया है)। मैं इसे फिर से दबाता हूं (चयनित राज्य में पहले से ही बटन) और राज्य को हाइलाइट करने के लिए बदला जाना चाहिए और मुझे दबाया हुआ चित्र देखना चाहिए। लेकिन मैं इस मामले में नहीं देखता हूं।
user478681

1

अगर किसी को आश्चर्य है कि यह स्विफ्ट में कैसे काम करता है, तो यहां मेरा समाधान है:

button.setImage("normal.png", forState: .Normal)
button.setImage("highlighted.png", forState: .Highlighted)
button.setImage("selected.png", forState: .Selected)

var selectedHighLightedStates: UIControlState = UIControlState.Highlighted
selectedHighLightedStates = selectedHighLightedStates.union(UIControlState.Selected)
button.setImage("selectedHighlighted.png", forState: selectedHighLightedStates)

@basegod यह एक कार्यशील समाधान है, लेकिन रोलांड कीसोम ने जिस तरह से लिखा है, वह बहुत साफ है।
जंगलबेदेव

1

स्विफ्ट 3+

button.setImage(UIImage(named: "selected_image"), for: [.selected, .highlighted])

या

button.setImage(UIImage(named: "selected_image"), for: UIControlState.selected.union(.highlighted))

इसका मतलब है कि selectedराज्य में बटन वर्तमान , फिर आप इसे स्पर्श करते हैं, highlightराज्य दिखाते हैं ।


0

मुझे सेटिंग करने में समस्या हुई imageView.highlighted = NO; ( YES ठीक से काम करने और छवि हाइलाइट किए गए एक में बदल गई)।

हल बुला रहा था [imageView setHighlighted:NO];

सब कुछ ठीक से काम किया।


0

आप कहां से कॉल करना चाहते हैं

[button addTarget:self action:@selector(test:) forControlEvents:UIControlEventTouchUpInside];

प्रक्रिया:

-(void)test:(id)sender{
    UIButton *button=(UIButton *)sender;
    if (_togon){
      [button setTitleColor:UIColorFromRGB(89,89, 89) forState:UIControlStateNormal];
      _togon=NO;
    }
    else{
      [button setTitleColor:UIColorFromRGB(28, 154, 214) forState:UIControlStateNormal];
      _togon=YES;
    }
}

जोर्ज के ऊपर क्रेडिट लेकिन मैंने इसे पूरा काम करने वाले समाधान को थोड़ा सुधार दिया


0

ज़मीरिन सी #

बिटवाइज़ करना या किसी कारण से काम नहीं करना

button.SetImage(new UIImage("ImageNormal"), UIControlState.Normal);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Selected | UIControlState.Highlighted | UIControlState.Focused);

निम्नलिखित कार्य करता है

button.SetImage(new UIImage("ImageNormal"), UIControlState.Normal);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Selected);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Highlighted);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Focused);

0

यदि आपको हाइलाइट किए गए टिंट की आवश्यकता होती है, जो आपके द्वारा चयनित राज्य के लिए कस्टम बटन पर टैप और होल्ड करने पर OS डिफ़ॉल्ट रूप से प्रदान करता है, तो इस UIButton उपवर्ग का उपयोग करें। स्विफ्ट 5 में लिखा है:

import Foundation
import UIKit
class HighlightOnSelectCustomButton: UIButton {
    override var isHighlighted: Bool {
        didSet {
            if (self.isSelected != isHighlighted) {
                self.isHighlighted = self.isSelected
            }
        }
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.