ios सवर मैं UITableView चयन हाइलाइटिंग को अक्षम कैसे कर सकता हूं?




भूल गया पासकोड (30)

उद्देश्य सी:

  1. नीचे स्निपेट को हाइलाइट करने में अक्षम करें, लेकिन यह करने के लिए कॉल को भी अक्षम करें didSelectRowAtIndexPath । इसलिए यदि आप कार्यान्वित नहीं कर रहे हैं didSelectRowAtIndexPath तो नीचे विधि का उपयोग करें। जब आप टेबल बना रहे हों तो इसे जोड़ा जाना चाहिए। हालांकि यह सेल के अंदर बटन और UITextField पर काम करेगा।

    self.tableView.allowsSelection = NO;
    
  2. नीचे स्निपेट अक्षम हाइलाइटिंग और यह करने के लिए कॉल को अक्षम नहीं करता है didSelectRowAtIndexPathcellForRowAtIndexPath में सेल की चयन शैली को किसी भी पर सेट करें

    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    
  3. नीचे स्निपेट सेल पर सबकुछ अक्षम करें। यह buttons , textfields बातचीत को अक्षम कर देगा:

    self.tableView.userInteractionEnabled = false;
    

स्विफ्ट:

उपरोक्त Objective-C समाधान के Swift समकक्ष नीचे दिए गए हैं:

  1. पहले समाधान की प्रतिस्थापन

    self.tableView.allowsSelection = false
    
  2. दूसरे समाधान की प्रतिस्थापन

    cell?.selectionStyle = UITableViewCellSelectionStyle.None
    
  3. तीसरे समाधान की प्रतिस्थापन

    self.tableView.userInteractionEnabled = false
    

https://code.i-harness.com

जब आप UITableView में कोई पंक्ति टैप करते हैं, तो पंक्ति को हाइलाइट किया जाता है और चुना जाता है। क्या यह अक्षम करना संभव है ताकि एक पंक्ति को टैप करने से कुछ भी न हो?


UItableviewcell की हाइलाइटिंग को अक्षम करने के लिए

cell.selectionStyle = UITableViewCellSelectionStyleNone;

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

cell.userInteractionEnabled = NO;

अगर किसी को Swift लिए उत्तर की आवश्यकता है:

cell.selectionStyle = .None

आईओएस 6.0 के रूप में, UITableViewDelegate में tableView:shouldHighlightRowAtIndexPath: UITableViewDelegate है tableView:shouldHighlightRowAtIndexPath: :। (आईओएस Documentation में इसके बारे में पढ़ें।)

यह विधि आपको विशिष्ट पंक्तियों को एक सेल की चयन शैली को बदलने के बिना, हाइलाइट करने योग्य (और स्पष्ट रूप से, अचयनित) के रूप में चिह्नित करने देती है, जो userInteractionEnabled = NO , या यहां प्रलेखित किसी अन्य तकनीक के साथ सेल के ईवेंट हैंडलिंग के साथ userInteractionEnabled = NO कर रही है।


आप UITableViewCell की चयन स्टाइल संपत्ति का उपयोग कर सकते हैं

 cell.selectionStyle = UITableViewCellSelectionStyleNone;

या

 [cell setSelectionStyle:UITableViewCellSelectionStyleNone];

साथ ही, प्रतिनिधि के नीचे लागू नहीं करें

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { ... }

यदि आपने Xib / Storyboard फ़ाइल बनाई है तो आप इसे अनचेक करके टेबलव्यू की setUserInteractionEnabled प्रॉपर्टी को बदल सकते हैं। यह आपके टेबलव्यू को केवल पढ़ने के लिए ही बना देगा।


आप इसका इस्तेमाल कर सकते हैं

cell.selectionStyle = UITableViewCellSelectionStyleNone;

आप इसे स्टोरीबोर्ड से भी कर सकते हैं। तालिका दृश्य कक्ष पर क्लिक करें और तालिका दृश्य कक्ष के अंतर्गत विशेषता निरीक्षक में, चयन के बगल में स्थित ड्रॉप को किसी के लिए बदलें।


आप उपयोग कर सकते हैं ....

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

आपको बस इतना करना है कि UITableViewCell इंस्टेंस पर चयन शैली सेट करें या तो:

उद्देश्य सी:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

या

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

स्विफ्ट 2:

cell.selectionStyle = UITableViewCellSelectionStyle.None

स्विफ्ट 3:

cell.selectionStyle = .none

इसके अलावा, सुनिश्चित करें कि आप या तो कार्यान्वित नहीं करते -tableView:didSelectRowAtIndexPath: अपनी तालिका में प्रतिनिधियों को देखें या स्पष्ट रूप से उन कक्षों को बहिष्कृत करें जिन्हें आप लागू नहीं करना चाहते हैं यदि आप इसे लागू करते हैं।

यहां और here अधिक जानकारी


आपको बस इस कोड को cellForRowAtIndexPath में रखना होगा

सेल की चयन संपत्ति को अक्षम करने के लिए: (सेल को टैप करते समय)।

cell.selectionStyle = UITableViewCellSelectionStyle.None

इसे इस्तेमाल करे

cell.selectionStyle = UITableViewCellSelectionStyleNone;

तथा

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

और आप इंटरफ़ेसबिल्डर का उपयोग करके चयन शैली भी सेट कर सकते हैं।


एट्रिब्यूट इंस्पेक्टर में आपके UITableViewCell के XIB में Selection का None मूल्य सेट None


क्योंकि मैंने हाल ही में इस पोस्ट को पढ़ा है और इससे मेरी मदद मिली है, मैं सभी उत्तरों (वंशावली के लिए) को मजबूत करने के लिए एक और जवाब पोस्ट करना चाहता हूं।


इसलिए, वांछित तर्क और / या परिणाम के आधार पर वास्तव में 5 अलग-अलग उत्तर हैं:

1. सेल के किसी अन्य इंटरैक्शन को बदले बिना ब्लू हाइलाइटिंग को अक्षम करने के लिए:

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

मैं इसका उपयोग करता हूं जब मेरे पास UIButton - या कुछ अन्य नियंत्रण होते हैं - UITableViewCell में होस्ट किए जाते हैं और मैं चाहता हूं कि उपयोगकर्ता नियंत्रण के साथ बातचीत करने में सक्षम हो लेकिन सेल स्वयं ही नहीं।

नोट : जैसा टोनी मिलियन ऊपर उल्लेख किया गया है, यह tableView:didSelectRowAtIndexPath: रोकता नहीं है tableView:didSelectRowAtIndexPath: :। मैं इसे सरल "अगर" कथन से प्राप्त करता हूं, अक्सर अनुभाग के लिए परीक्षण करता है और किसी विशेष अनुभाग के लिए कार्रवाई से परहेज करता है।

एक और तरीका जिस तरह से मैंने इस तरह के सेल के टैपिंग के लिए परीक्षण करने का विचार किया है:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // A case was selected, so push into the CaseDetailViewController
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    if (cell.selectionStyle != UITableViewCellSelectionStyleNone) {
        // Handle tap code here
    }
}



2. पूरी तालिका के लिए ऐसा करने के लिए, आप तालिका में प्रत्येक सेल को उपर्युक्त समाधान लागू कर सकते हैं, लेकिन आप यह भी कर सकते हैं:

[tableView setAllowsSelection:NO];

मेरे परीक्षण में, यह अभी भी UITableViewCell अंदर नियंत्रण को इंटरैक्टिव होने की अनुमति देता है।


3. एक सेल "केवल पढ़ने के लिए" बनाने के लिए, आप बस यह कर सकते हैं:

[cell setUserInteractionEnabled:NO];



4. पूरी तालिका बनाने के लिए "केवल पढ़ने के लिए"

[tableView setUserInteractionEnabled:NO];



5. एक सेल को हाइलाइट करने के लिए ऑन-द-फ्लाई निर्धारित करने के लिए (जो इस उत्तर के अनुसार स्पष्ट रूप से चयन शामिल है), आप निम्न UITableViewDelegate प्रोटोकॉल विधि को कार्यान्वित कर सकते हैं:

- (BOOL)tableView:(UITableView *)tableView 
   shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath

जो मैं मानता हूं उसे पूरा करने के लिए इसे लागू करने में अपने स्वयं के अनुभव के आधार पर सही उत्तर हैं:

यदि आप केवल कुछ कोशिकाओं के लिए चयन अक्षम करना चाहते हैं, तो इसका उपयोग करें:

cell.userInteractionEnabled = NO;

साथ ही चयन को रोकने के साथ, यह तालिका दृश्य को भी रोकता है: didSelectRowAtIndexPath: इसे सेट करने वाले कक्षों के लिए बुलाया जा रहा है। (इस जवाब के लिए क्रेडिट टोनी मिलियन को जाता है, धन्यवाद!)

यदि आपके पास उन कक्षों में बटन हैं जिन्हें क्लिक करने की आवश्यकता है, तो आपको इसके बजाय इसकी आवश्यकता है:

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

और आपको सेल पर किसी भी क्लिक को अनदेखा करने की आवश्यकता है - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

यदि आप पूरी तालिका के लिए चयन अक्षम करना चाहते हैं, तो इसका उपयोग करें:

tableView.allowsSelection = NO;

(पाउलो डी Barros के लिए क्रेडिट, धन्यवाद!)


टाइप करने का प्रयास करें:

cell.selected = NO;

आवश्यकता होने पर यह आपकी पंक्ति को अचयनित कर देगा।

स्विफ्ट 3 में ...

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let r = indexPath.row
    print("clicked .. \(r)")
    tableView.cellForRow(at: indexPath)?.setSelected(false, animated: true)
}

तेजी से चयन के लिए

cell.selectionStyle = .None

नीचे दिए गए चित्र में दिखाए गए अनुसार इंस्पेक्टर फलक में selection विकल्प (UITableView गुणों) से NoSelection चुनकर आप इंटरफ़ेस बिल्डर से पंक्ति का चयन भी अक्षम कर सकते हैं


मेरे लिए, निम्नलिखित ठीक काम किया:

tableView.allowsSelection = NO;

इसका मतलब है didSelectRowAt# बस काम नहीं करेगा। ऐसा कहने के लिए, तालिका की एक पंक्ति को छूना, जैसा कि, बिल्कुल कुछ भी नहीं करेगा। (और इसलिए, जाहिर है, कभी भी एक चयनित एनीमेशन नहीं होगा।)

(ध्यान दें कि यदि कोशिकाओं पर, आपके पास UIButton या कोई अन्य नियंत्रण है, निश्चित रूप से वे नियंत्रण अभी भी काम करेंगे। तालिका कक्ष पर आपके द्वारा होने वाले किसी भी नियंत्रण, UITableView की पूरी तरह से असंबंधित हैं, ताकि आप "पंक्ति का चयन कर सकें " didSelectRowAt# का उपयोग कर।)


मैं इस काफी profusely से भी जूझ रहा है, मेरे UITableViewCell में नियंत्रण रखने से userInteractionEnabled संपत्ति का उपयोग प्रतिबंधित है। मेरे पास सेटिंग्स के लिए 3 सेल स्थैतिक तालिका है, 2 तारीखों के साथ, 1 चालू / बंद स्विच के साथ। स्टोरीबोर्ड / आईबी में खेलने के बाद मैंने नीचे एक गैर-चयन योग्य बनाने में कामयाब रहा है, लेकिन जब आप इसे टैप करते हैं तो शीर्ष पंक्तियों में से एक का चयन गायब हो जाता है। मेरी सेटिंग्स की एक डब्ल्यूआईपी छवि यहां UITableView है:

यदि आप तीसरी पंक्ति को टैप करते हैं तो कुछ भी नहीं होता है, तो चयन दूसरी पंक्ति पर रहेगा। कार्यक्षमता व्यावहारिक रूप से ऐप्पल के कैलेंडर ऐप की घटना समय चयन स्क्रीन की एक प्रति है।

कोड आश्चर्यजनक रूप से संगत है, आईओएस 2 = / के नीचे सभी तरह से:

- (NSIndexPath *)tableView: (UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == 2) {
        return nil;
    }
    return indexPath;
}

यह चयन शैली को किसी के साथ सेट करने के संयोजन के साथ काम करता है, इसलिए सेल टच डाउन इवेंट्स पर झिलमिलाहट नहीं करता है


मैं इसका उपयोग कर रहा हूं, जो मेरे लिए काम करता है।

cell?.selectionStyle = UITableViewCellSelectionStyle.None

यदि आप UITableViewCellSelectionStyleNone उपयोग नहीं करना चाहते / नहीं कर सकते हैं, तो आप UITableViewCellSelectionStyleNone के समान प्रभाव प्राप्त करने के लिए पृष्ठभूमि रंग भी सेट कर सकते हैं।

आप निम्न जैसे कोड का उपयोग करेंगे:

UIView *backgroundColorView = [[UIView alloc] init];
backgroundColorView.backgroundColor = [UIColor clearColor];
backgroundColorView.layer.masksToBounds = YES;
[cell setSelectedBackgroundView: backgroundColorView];

यह आपके प्रदर्शन को घटा सकता है क्योंकि आप प्रत्येक सेल में एक अतिरिक्त रंगीन दृश्य जोड़ते हैं।


यदि आप चयन केवल फ्लैश करना चाहते हैं, तो चयनित स्थिति में नहीं रहें, आप कॉल कर सकते हैं

didSelectRowAtIndexPath

निम्नलिखित

[tableView deselectRowAtIndexPath:indexPath animated:YES];

इसलिए यह चयनित राज्य फ्लैश करेगा और वापस लाएगा।


यही है वह जो मेरे द्वारा उपयोग किया जाता है :

cell.selectionStyle = UITableViewCellSelectionStyleNone;

cellForRowAtIndexPath में इस कोड को लिखें।


हम कोड लिख सकते हैं

 cell.selectionStyle = UITableViewCellSelectionStyleNone;

लेकिन जब हमारे पास कस्टम सेल xib ऊपर है तो उस समय चेतावनी दें

कस्टम सेल xib

हमें इंटरफ़ेस बिल्डर से चयन शैली सेट करने की आवश्यकता नहीं है


हालांकि चयन के दौरान हाइलाइट दिखाने से पंक्ति को रोकने के लिए यह सबसे अच्छा और आसान समाधान है

cell.selectionStyle = UITableViewCellSelectionStyleNone;

मैं यह भी सुझाव देना चाहता हूं कि कभी-कभी यह दिखाने के लिए उपयोगी होता है कि पंक्ति का चयन किया गया है और फिर इसे बंद कर दिया गया है। यह उपयोगकर्ताओं को यह पुष्टि करने के लिए अलर्ट करता है कि वे क्या चुनना चाहते हैं:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     [tableView deselectRowAtIndexPath:indexPath animated:NO];
...
}

UITableViewDelegate प्रोटोकॉल से आप विधि का willSelectRowAtIndexPath कर सकते हैं willSelectRowAtIndexPath और यदि आप पंक्ति को नहीं willSelectRowAtIndexPath चाहते हैं तो return nil

वैसे ही आप willDeselectRowAtIndexPath विधि का उपयोग कर सकते हैं और यदि आप पंक्ति को अचयनित नहीं करना चाहते हैं तो return nil


स्विफ्ट 3 के लिए तय समाधान

cell.selectionStyle = .none

स्विफ्ट समाधान डब्ल्यू / कस्टम सेल:

import Foundation

class CustomTableViewCell: UITableViewCell
{
  required init(coder aDecoder: NSCoder)
  {
    fatalError("init(coder:) has not been implemented")
  }

  override init(style: UITableViewCellStyle, reuseIdentifier: String?)
  {
    super.init(style: style, reuseIdentifier: reuseIdentifier)
    self.selectionStyle = UITableViewCellSelectionStyle.None
  } 
}

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
[cell setSelected:NO animated:NO];
[cell setHighlighted:NO animated:NO];

हैप्पी कोडिंग !!!


cell.selectionStyle = UITableViewCellSelectionStyleNone;






highlight