UITableView सेल चयनित रंग?


319

मैंने एक रिवाज बनाया है UITableViewCell। तालिका दृश्य डेटा ठीक दिखा रहा है। मैं जिस चीज में फंस गया हूं, जब उपयोगकर्ता तालिका के सेल को छूता है, तो मैं सेल के चयन को उजागर करने के लिए डिफ़ॉल्ट [नीले रंग] मूल्यों के अलावा सेल की पृष्ठभूमि का रंग दिखाना चाहता हूं। मैं इस कोड का उपयोग करता हूं, लेकिन ऐसा कुछ नहीं होता है:

cell.selectedBackgroundView.backgroundColor=[UIColor blackColor];

जवाबों:


365

मुझे लगता है कि आप सही रास्ते पर थे, लेकिन इसके लिए वर्ग की परिभाषा के अनुसार selectedBackgroundView:

सादा-शैली तालिकाओं (UITableViewStylePlain) में कोशिकाओं के लिए डिफ़ॉल्ट और अनुभाग-समूह तालिकाओं के लिए गैर-शून्य UITableViewStyleGrouped) है।

इसलिए, यदि आप एक सादे-शैली की मेज का उपयोग कर रहे हैं, तो आपको UIViewअपने इच्छित पृष्ठभूमि रंग को एक नया आवंटित करना होगा और फिर उसे असाइन करना होगा selectedBackgroundView

वैकल्पिक रूप से, आप उपयोग कर सकते हैं:

cell.selectionStyle = UITableViewCellSelectionStyleGray;

यदि आप चाहते थे कि सेल चयनित होने पर एक ग्रे बैकग्राउंड हो। उम्मीद है की यह मदद करेगा।


1
यह गुण स्टोरीबोर्ड में भी सेट किया जा सकता है यदि आप दृश्य से संबंधित सामग्री देखना छोड़ना चाहते हैं।
IIllIIll

1
स्विफ्ट 3 संस्करण: cell.selectionStyle = .gray // आप .none, .blue या .default
Sébastien REMY

6
यह उत्तर काफी पुराना है ... क्या नए iOS संस्करणों में कुछ परिवर्तन किए गए हैं? मेरे पास एक सादी शैली की मेज है और मेरा चयनित बैकग्राउंड व्यू शून्य नहीं है। दिलचस्प है कि इस दृश्य पर पृष्ठभूमि रंग बदलने से कोई प्रभाव नहीं पड़ता है, इसके बजाय मुझे इसे काम करने के लिए अपने वांछित पृष्ठभूमि रंग के साथ एक नए यूआईवाईयूवाई द्वारा प्रतिस्थापित करना होगा।
ndreisg

आपने मुझे पूरी तरह पागल होने से बचा लिया। बहुत धन्यवाद!
mrwheet

656

कस्टम कोशिकाओं के लिए कोई ज़रूरत नहीं है। यदि आप केवल सेल का चयनित रंग बदलना चाहते हैं, तो आप ऐसा कर सकते हैं:

उद्देश्य सी:

UIView *bgColorView = [[UIView alloc] init];
bgColorView.backgroundColor = [UIColor redColor];
[cell setSelectedBackgroundView:bgColorView];

स्विफ्ट:

let bgColorView = UIView()
bgColorView.backgroundColor = UIColor.red
cell.selectedBackgroundView = bgColorView

47
यह काम करता है, लेकिन एक समूहीकृत UITableView में, गोल कोने खो जाते हैं।
डेविड

1
@ डेविड क्या कोने की तालिका में कहीं भी काम करता है? क्या होगा अगर सेल बीच में है? यह परीक्षण करने के लिए समय नहीं है।
मैकीज स्विक

2
के लिए तेजी से गलती है। सही लाइन cell.selectedBackgroundView = bgColorView
जॉन काकॉन

13
इस बात से अवगत रहें कि स्टोरीबोर्ड (या XIB फ़ाइल) में काम करने के लिए, आपको कोई नहीं के अलावा एक चयनित पृष्ठभूमि रंग का चयन करना होगा। यह कुछ उत्तरों के विपरीत है जो कहते हैं कि आपको इसे काम करने के लिए पहले से किसी पर सेट करने की आवश्यकता नहीं है। किसी के साथ, यह काम नहीं करेगा। मुझे पागल बना रहा था जब तक कि मैं इसे समझ नहीं पाया। धन्यवाद।
काकूबाई

1
जब आप स्टोरीबोर्ड का उपयोग भी कर रहे हैं तो आप यह काम कैसे करेंगे?
जॉन

42

तालिका दृश्य सेल चयन पृष्ठभूमि रंग इंटरफ़ेस बिल्डर में स्टोरीबोर्ड के माध्यम से सेट किया जा सकता है:

तालिका दृश्य सेल चयन रंग कोई नहीं


1
मुझे लगता है कि हम स्टोरीबोर्ड से कस्टम रंग सेट नहीं कर सकते। इसे प्रोग्रामेटिक रूप से सेट करने की आवश्यकता है।
पल्लवी

37

यदि आपके पास प्रति अनुभाग केवल एक कक्ष के साथ एक समूहीकृत तालिका है, तो इस अतिरिक्त पंक्ति को कोड में जोड़ें: bgColorView.layer.cornerRadius = 10;

UIView *bgColorView = [[UIView alloc] init];
[bgColorView setBackgroundColor:[UIColor redColor]];
bgColorView.layer.cornerRadius = 10;
[cell setSelectedBackgroundView:bgColorView];
[bgColorView release]; 

क्वार्ट्जकोर आयात करना न भूलें।


28

स्विफ्ट 3: मेरे लिए यह तब काम आया जब आपने इसे cellForRowAtIndexPath:विधि में रखा

let view = UIView()
view.backgroundColor = UIColor.red
cell.selectedBackgroundView = view

6
मुझे लगता है कि इसे लगाने का बेहतर स्थान awakeFromNib()विधि है (कस्टम सेल के मामले में)।
लैम्बर्गसुन

22

निम्नलिखित मेरे लिए iOS 8 में काम करता है।

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

सेल के लिए पूर्ण कोड निम्नानुसार है:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"MyCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    // This is how you change the background color
    cell.selectionStyle = UITableViewCellSelectionStyleDefault;
    UIView *bgColorView = [[UIView alloc] init];
    bgColorView.backgroundColor = [UIColor redColor];
    [cell setSelectedBackgroundView:bgColorView];        
    return cell;
}

यह कोड मेमोरी लीक कर रहा है। कोई भी "आवंटित" या ऑब्जेक्ट निर्माण यदि (सेल == nil) {} ब्लॉक में होना चाहिए। या आईओएस द्वारा सेल जारी किए जाने के बाद हर बार दृश्य बनाया जाएगा।
जिनेकोड

18

अपने टेबल सेल के लिए एक कस्टम सेल बनाएं और कस्टम सेल क्लास में नीचे दिए गए कोड को रखें, यह ठीक काम करेगा। आपको वांछित रंग छवि को selectionBackgroundUIImage में रखने की आवश्यकता है।

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    UIImage *selectionBackground = [UIImage imageNamed:@"yellow_bar.png"];
    UIImageView *iview=[[UIImageView alloc] initWithImage:selectionBackground];
    self.selectedBackgroundView=iview;
}

2
मुझे लगता है कि यह एक चयनित बैकग्राउंड व्यू को सेट करने से अधिक मेमोरी कुशल हो सकता है जब सेल को केवल एक सेल चुने जाने पर बीजी दृश्य बनाकर शुरू किया जाता है।
dotslashlu

11

स्विफ्ट 3.0 का विस्तार

extension UITableViewCell {
    var selectionColor: UIColor {
        set {
            let view = UIView()
            view.backgroundColor = newValue
            self.selectedBackgroundView = view
        }
        get {
            return self.selectedBackgroundView?.backgroundColor ?? UIColor.clear
        }
    }
}

cell.selectionColor = UIColor.FormaCar.blue


1
IBDesignable, और IBInspectable
Michał Ziobro

1
@ MichałZiobro सिर्फ @IBInspectableअगर आप चाहते हैं कि संस्करण में जोड़ें । @IBDesignableइसके लिए उपयोगी नहीं है।
निक कोव

9
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIView *view = [[UIView alloc] init];
    [view setBackgroundColor:[UIColor redColor]];
    [cell setSelectedBackgroundView:view];
}

हमें इस पद्धति में चयनित पृष्ठभूमि दृश्य सेट करने की आवश्यकता है।


8

यदि आप अपने सेल में एक कस्टम हाइलाइट किए गए रंग को जोड़ना चाहते हैं (और आपके सेल में बटन, लेबल, चित्र आदि शामिल हैं।) मैंने अगले चरणों का पालन किया:

उदाहरण के लिए यदि आप एक चयनित पीला रंग चाहते हैं:

1) एक ऐसा दृश्य बनाएं जो सभी सेल को 20% अपारदर्शिता (पीले रंग के साथ) के लिए फिट करता है जिसे उदाहरण के लिए कहा जाता है backgroundselectedView

2) सेल कंट्रोलर में यह लिखें:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
     self.backgroundselectedView.alpha=1;
    [super touchesBegan:touches withEvent:event];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    self.backgroundselectedView.alpha=0;
    [super touchesEnded:touches withEvent:event];
}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
    self.backgroundSelectedImage.alpha=0;
    [super touchesCancelled:touches withEvent:event];
}

8

स्विफ्ट 4 में, आप विश्व स्तर पर अपनी तालिका सेल की पृष्ठभूमि का रंग निर्धारित कर सकते हैं ( यहाँ से लिया गया है ):

let backgroundColorView = UIView()
backgroundColorView.backgroundColor = UIColor.red
UITableViewCell.appearance().selectedBackgroundView = backgroundColorView

6

यदि आप एक कस्टम TableViewCell का उपयोग कर रहे हैं, तो आप ओवरराइड भी कर सकते हैं awakeFromNib:

override func awakeFromNib() {
    super.awakeFromNib()

    // Set background color
    let view = UIView()
    view.backgroundColor = UIColor.redColor()
    selectedBackgroundView = view
}

1
अच्छा समाधान! धन्यवाद
थॉमस Calmon

मैं 10 से अधिक कोशिकाओं के साथ एक साधारण टेबलव्यू कर रहा हूं, यह अब तक बहुत अच्छा काम करता है।
code4ltete

5

समूह तालिका के लिए गोल कोने की पृष्ठभूमि को दिखाने के लिए ईसाई के तरीके के लिए एक और टिप।

यदि मैं cornerRadius = 10सेल के लिए उपयोग करता हूं , तो यह चार कोने वाली गोल चयन पृष्ठभूमि को दर्शाता है। यह तालिका दृश्य के डिफ़ॉल्ट UI के साथ समान नहीं है।

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

मैंने iPad के साथ इस कोड का परीक्षण किया splitterview। आप पैचलेयर के फ्रेम पोजीशन को बदल सकते हैं जैसे आपको जरूरत थी।

कृपया मुझे बताएं कि क्या समान परिणाम प्राप्त करने के लिए अधिक आसान तरीका है।

if (tableView.style == UITableViewStyleGrouped) 
{
    if (indexPath.row == 0) 
    {
        cellPosition = CellGroupPositionAtTop;
    }    
    else 
    {
        cellPosition = CellGroupPositionAtMiddle;
    }

    NSInteger numberOfRows = [tableView numberOfRowsInSection:indexPath.section];
    if (indexPath.row == numberOfRows - 1) 
    {
        if (cellPosition == CellGroupPositionAtTop) 
        {
            cellPosition = CellGroupPositionAtTopAndBottom;
        } 
        else 
        {
            cellPosition = CellGroupPositionAtBottom;
        }
    }

    if (cellPosition != CellGroupPositionAtMiddle) 
    {
        bgColorView.layer.cornerRadius = 10;
        CALayer *patchLayer;
        if (cellPosition == CellGroupPositionAtTop) 
        {
            patchLayer = [CALayer layer];
            patchLayer.frame = CGRectMake(0, 10, 302, 35);
            patchLayer.backgroundColor = YOUR_BACKGROUND_COLOR;
            [bgColorView.layer addSublayer:patchLayer];
        } 
        else if (cellPosition == CellGroupPositionAtBottom) 
        {
            patchLayer = [CALayer layer];
            patchLayer.frame = CGRectMake(0, 0, 302, 35);
            patchLayer.backgroundColor = YOUR_BACKGROUND_COLOR;
            [bgColorView.layer addSublayer:patchLayer];
        }
    }
}

4

मैं यह नोट करना चाहता हूं कि XIB संपादक आपको निम्नलिखित मानक विकल्प प्रदान करता है:

अनुभाग: नीला / ग्रे / कोई नहीं

(विकल्पों के साथ दाहिने हाथ का कॉलम, 4 टैब, पहला समूह "टेबल व्यू सेल", 4 वां उपसमूह, 3 आइटमों में से 1 "चयन" पढ़ता है)

संभवतः आप जो करना चाहते हैं वह सही मानक विकल्प का चयन करके प्राप्त किया जा सकता है।


आप सही हे। ऐसा करने के कारण, यदि आप ऐसा करते हैं, तो आप चयन करके "सेलफ़ोररॉवटइंडेक्सपैथ" में चयन का रंग बदल सकते हैं: यूआईटेबल व्यूसेल * सेल = [tableView dequeueReusableCellWithIententifier: @ "सेल"]; cell.selectedBackgroundView = [[UIView आबंटित] initWithFrame: CGRectZero]; cell.selectedBackgroundView.backgroundColor = [UIColor colorWithRed: (255/255) हरा: (0/255) नीला: (0/255) अल्फा: 0.1];
user8675

धन्यवाद! जाने का रास्ता
फेटी

3

में चयनित सेल के लिए कस्टम रंग के UITableViewअनुसार, Maciej Swic के उत्तर के अनुसार बढ़िया समाधान

बस इससे जोड़ने के लिए, आप आमतौर पर निम्न में सेल विन्यास में Swic के उत्तर की घोषणा करते हैं :

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

और एक अतिरिक्त प्रभाव के लिए, सिस्टम रंगों के बजाय, आप कस्टम कलर लुक के लिए RGB मानों का उपयोग कर सकते हैं। मेरे कोड में यह है कि मैंने इसे कैसे हासिल किया:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

} 

 static NSString *CellIdentifier = @"YourCustomCellName";
 MakanTableCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

// Configure the cell...

if (cell == nil) {

cell = [[[NSBundle mainBundle]loadNibNamed:@"YourCustomCellClassName" owner:self options:nil]objectAtIndex:0];
                    } 

UIView *bgColorView = [[UIView alloc] init];
bgColorView.backgroundColor = [UIColor colorWithRed:255.0/256.0 green:239.0/256.0 blue:49.0/256.0 alpha:1];
bgColorView.layer.cornerRadius = 7;
bgColorView.layer.masksToBounds = YES;
[cell setSelectedBackgroundView:bgColorView];


return cell;

}

मुझे पता है कि अगर आप के लिए भी काम करता है। आप cornerRadiusचयनित सेल के कोनों पर प्रभाव के लिए संख्या के साथ गड़बड़ कर सकते हैं ।


3

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

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    self.backgroundColor = UIColor(white: 0.0, alpha: 0.1)
    super.touchesBegan(touches, withEvent: event)
}

override func touchesCancelled(touches: NSSet!, withEvent event: UIEvent!) {
    self.backgroundColor = UIColor.clearColor()
    super.touchesCancelled(touches, withEvent: event)
}

override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
    self.backgroundColor = selected ? UIColor(white: 0.0, alpha: 0.1) : UIColor.clearColor()
}

3

सभी कोशिकाओं के लिए पृष्ठभूमि जोड़ने के लिए (Maciej के उत्तर का उपयोग करके):

for (int section = 0; section < [self.tableView numberOfSections]; section++) {
        for (int row = 0; row < [self.tableView numberOfRowsInSection:section]; row++) {
            NSIndexPath* cellPath = [NSIndexPath indexPathForRow:row inSection:section];
            UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:cellPath];

            //stuff to do with each cell
            UIView *bgColorView = [[UIView alloc] init];
            bgColorView.backgroundColor = [UIColor redColor];
            [cell setSelectedBackgroundView:bgColorView];
        }
    } 

2

ओवरराइड करने के लिए UITableViewCell's setSelectedभी काम करता है।

override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Set background color
    let view = UIView()
    view.backgroundColor = UIColor.redColor()
    selectedBackgroundView = view
}

2

उन लोगों के लिए जो केवल डिफ़ॉल्ट चयनित ग्रे बैकग्राउंड से छुटकारा पाना चाहते हैं, कोड की इस पंक्ति को अपने सेलफ़ोररौटइंडेक्सपैथ फंक में डालें:

yourCell.selectionStyle = .None

1
बहुत बहुत धन्यवाद, यह मेरे लिए सही उत्तर है दूसरों के लिए नहीं।
डेयल्डीन

कोई भी या नीला या ग्रे सेट करने के बजाय "हरा" जैसा रंग कैसे सेट करें।
सत्यम

2

स्विफ्ट 3.0 के लिए:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let cell = super.tableView(tableView, cellForRowAt: indexPath)

    cell.contentView.backgroundColor = UIColor.red
}

अच्छा है, लेकिन उपयोगकर्ता द्वारा कुछ का चयन करने के बाद ही काम किया जाएगा (डिफ़ॉल्ट चयन रंग शुरू में रहेगा)
कोन्सटेंटिन सालावटोव

2

मैं नीचे दृष्टिकोण का उपयोग करता हूं और मेरे लिए ठीक काम करता है,

class MyTableViewCell : UITableViewCell {

                var defaultStateColor:UIColor?
                var hitStateColor:UIColor?

                 override func awakeFromNib(){
                     super.awakeFromNib()
                     self.selectionStyle = .None
                 }

// if you are overriding init you should set selectionStyle = .None

                override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
                    if let hitColor = hitStateColor {
                        self.contentView.backgroundColor = hitColor
                    }
                }

                override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
                    if let defaultColor = defaultStateColor {
                        self.contentView.backgroundColor = defaultColor
                    }
                }

                override func touchesCancelled(touches: Set<UITouch>?, withEvent event: UIEvent?) {
                    if let defaultColor = defaultStateColor {
                        self.contentView.backgroundColor = defaultColor
                    }
                }
            }

2

स्विफ्ट 4+:

अपनी तालिका सेल में निम्नलिखित पंक्तियाँ जोड़ें

let bgColorView = UIView()
bgColorView.backgroundColor =  .red
self.selectedBackgroundView = bgColorView

अंत में यह नीचे होना चाहिए

override func setSelected(_ selected: Bool, animated: Bool)
    {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
        let bgColorView = UIView()
        bgColorView.backgroundColor =  .red
        self.selectedBackgroundView = bgColorView

    }

1

यहाँ समूह सारणी के लिए आवश्यक कोड के महत्वपूर्ण भाग दिए गए हैं। जब किसी खंड की किसी भी कोशिका को पहली पंक्ति में रंग चुना जाता है। शुरू में सेलसेलेनेटस्टाइल को स्थापित किए बिना कोई भी एनाउंसिंग डबल रीलोड नहीं होता है जब उपयोगकर्ता पंक्ति 0 पर क्लिक करता है जहां सेल bgColorView में बदल जाता है तो फिर fades और फिर से लोड करता है bgColorView। गुड लक और मुझे बताएं कि क्या ऐसा करने का एक सरल तरीका है।

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    if ([indexPath row] == 0) 
    {
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        UIView *bgColorView = [[UIView alloc] init];
        bgColorView.layer.cornerRadius = 7;
        bgColorView.layer.masksToBounds = YES;
        [bgColorView setBackgroundColor:[UIColor colorWithRed:.85 green:0 blue:0 alpha:1]];
        [cell setSelectedBackgroundView:bgColorView];

        UIColor *backColor = [UIColor colorWithRed:0 green:0 blue:1 alpha:1];
        cell.backgroundColor = backColor;
        UIColor *foreColor = [UIColor colorWithWhite:1 alpha:1];
        cell.textLabel.textColor = foreColor;

        cell.textLabel.text = @"row0";
    }
    else if ([indexPath row] == 1) 
    {
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        UIColor *backColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:1];
        cell.backgroundColor = backColor;
        UIColor *foreColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1];
        cell.textLabel.textColor = foreColor;

        cell.textLabel.text = @"row1";
    }
    else if ([indexPath row] == 2) 
    {
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        UIColor *backColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:1];
        cell.backgroundColor = backColor;
        UIColor *foreColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1];
        cell.textLabel.textColor = foreColor;

        cell.textLabel.text = @"row2";
    }
    return cell;
}

#pragma mark Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSIndexPath *path = [NSIndexPath indexPathForRow:0 inSection:[indexPath section]];
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:path];
    [cell setSelectionStyle:UITableViewCellSelectionStyleBlue];

    [tableView selectRowAtIndexPath:path animated:YES scrollPosition:UITableViewScrollPositionNone];

}

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tvStat cellForRowAtIndexPath:indexPath];
    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
}

#pragma mark Table view Gestures

-(IBAction)singleTapFrom:(UIGestureRecognizer *)tapRecog
{

    CGPoint tapLoc = [tapRecog locationInView:tvStat];
    NSIndexPath *tapPath = [tvStat indexPathForRowAtPoint:tapLoc];

    NSIndexPath *seleRow = [tvStat indexPathForSelectedRow];
    if([seleRow section] != [tapPath section])
        [self tableView:tvStat didDeselectRowAtIndexPath:seleRow];
    else if (seleRow == nil )
        {}
    else if([seleRow section] == [tapPath section] || [seleRow length] != 0)
        return;

    if(!tapPath)
        [self.view endEditing:YES];

    [self tableView:tvStat didSelectRowAtIndexPath:tapPath];
}

1

कस्टम सेल वर्ग के मामले में। बस ओवरराइड करें:

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state

    if (selected) {
        [self setBackgroundColor: CELL_SELECTED_BG_COLOR];
        [self.contentView setBackgroundColor: CELL_SELECTED_BG_COLOR];
    }else{
        [self setBackgroundColor: [UIColor clearColor]];
        [self.contentView setBackgroundColor: [UIColor clearColor]];
    }
}

0

यह आसान है जब टेबल दृश्य शैली सादा है, लेकिन समूह शैली में, यह थोड़ी परेशानी है, मैं इसे हल करता हूं:

CGFloat cellHeight = [self tableView:tableView heightForRowAtIndexPath:indexPath];
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kGroupTableViewCellWidth+2, cellHeight)];
view.backgroundColor = kCommonHighlightedColor;
cell.selectedBackgroundView = view;
[view release];
UIRectCorner cornerFlag = 0;
CGSize radii = CGSizeMake(0, 0);
NSInteger theLastRow = --> (yourDataSourceArray.count - 1);
if (indexPath.row == 0) {
    cornerFlag = UIRectCornerTopLeft | UIRectCornerTopRight;
    radii = CGSizeMake(10, 10);
} else if (indexPath.row == theLastRow) {
    cornerFlag = UIRectCornerBottomLeft | UIRectCornerBottomRight;
    radii = CGSizeMake(10, 10);
}
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:view.bounds byRoundingCorners:cornerFlag cornerRadii:radii];
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.path = maskPath.CGPath;
view.layer.mask = shapeLayer;

kGroupTableViewCellWidth को नोट किया, मैं इसे 300 के रूप में परिभाषित करता हूं, यह iPhone में ग्रुप टेबल व्यू सेल की चौड़ाई की चौड़ाई है


0
[cell setSelectionStyle:UITableViewCellSelectionStyleGray];

सुनिश्चित करें कि आपने चयन प्रभाव का उपयोग करने के लिए उपरोक्त लाइन का उपयोग किया है


0
override func setSelected(selected: Bool, animated: Bool) {
    // Configure the view for the selected state

    super.setSelected(selected, animated: animated)
    let selView = UIView()

    selView.backgroundColor = UIColor( red: 5/255, green: 159/255, blue:223/255, alpha: 1.0 )
    self.selectedBackgroundView = selView
}

कृपया अपने उत्तर की कुछ व्याख्या को सभी भविष्य के पाठकों के लिए पठनीय बनाने के लिए जोड़ें
टेकस्पाइडर

0

मैं iOS 9.3 का उपयोग कर रहा हूं और स्टोरीबोर्ड या सेटिंग के माध्यम से रंग सेट cell.selectionStyleकरना मेरे लिए काम नहीं कर रहा है, लेकिन नीचे दिए गए कोड ने काम किया:

UIView *customColorView = [[UIView alloc] init];
customColorView.backgroundColor = [UIColor colorWithRed:55 / 255.0 
                                                  green:141 / 255.0 
                                                   blue:211 / 255.0 
                                                  alpha:1.0];
cell.selectedBackgroundView = customColorView;

return cell;

मैं इस समाधान पाया यहाँ


0

निम्नलिखित कोड का प्रयास करें।

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:[cellIdArray objectAtIndex:indexPath.row] forIndexPath:indexPath];

    // Configure the cell...
    cell.backgroundView =
    [[UIImageView alloc] init] ;
    cell.selectedBackgroundView =[[UIImageView alloc] init];

    UIImage *rowBackground;
    UIImage *selectionBackground;


    rowBackground = [UIImage imageNamed:@"cellBackgroundDarkGrey.png"];
    selectionBackground = [UIImage imageNamed:@"selectedMenu.png"];

    ((UIImageView *)cell.backgroundView).image = rowBackground;
    ((UIImageView *)cell.selectedBackgroundView).image = selectionBackground;



    return cell;
}

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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


        let cell = tableView.dequeueReusableCell(withIdentifier: "cell")! as UITableViewCell


        cell.selectedBackgroundView = UIImageView()
        cell.backgroundView=UIImageView()

        let selectedBackground : UIImageView = cell.selectedBackgroundView as! UIImageView
        selectedBackground.image = UIImage.init(named:"selected.png");

        let backGround : UIImageView = cell.backgroundView as! UIImageView
        backGround.image = UIImage.init(named:"defaultimage.png");

        return cell


    } 

0

स्विफ्ट 4.x

चयन पृष्ठभूमि को किसी भी रंग में बदलने के लिए स्विफ्ट एक्सटेंशन का उपयोग करें

नीचे के रूप में UITableView सेल एक्सटेंशन बनाएं

extension UITableViewCell{

    func removeCellSelectionColour(){
        let clearView = UIView()
        clearView.backgroundColor = UIColor.clear
        UITableViewCell.appearance().selectedBackgroundView = clearView
    } 

}

फिर सेल उदाहरण के साथ removeCellSelectionColour () को कॉल करें ।

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