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




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

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


उद्देश्य सी:

  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
    

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

cell.selectionStyle = UITableViewCellSelectionStyleNone;

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

cell.userInteractionEnabled = NO;

आईओएस 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 setSelectionStyle:UITableViewCellSelectionStyleNone];

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

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

cell.selectionStyle = UITableViewCellSelectionStyle.None

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

cell.selectionStyle = UITableViewCellSelectionStyleNone;

तथा

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

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


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


इसलिए, वांछित तर्क और / या परिणाम के आधार पर वास्तव में 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.selectionStyle = .None

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


मैं इस काफी 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

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

didSelectRowAtIndexPath

निम्नलिखित

[tableView deselectRowAtIndexPath:indexPath animated:YES];

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


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

cell.selectionStyle = UITableViewCellSelectionStyleNone;

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


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

cell.selectionStyle = UITableViewCellSelectionStyleNone;

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

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

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

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


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

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

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





highlight