UITableView कुछ कोशिकाओं को "अचयनित" के रूप में सेट करना


109

मैं UITableView की सेल संपत्ति को अचयनित करने के लिए कैसे सेट कर सकता हूं? जब उपयोगकर्ता सेल पर टैप करता है तो मैं उस नीले चयन बॉक्स को नहीं देखना चाहता।


4
नोट हाल Googlers: जिस तरह से आईओएस 6 के रूप में यह करने के लिए और अधिक से अधिक है tableView:shouldHighlightRowAtIndexPath:के रूप में नीचे आयुष द्वारा नोट
jemmons

जवाबों:


151

तालिका सेल की selectionStyleसंपत्ति पर सेट करें UITableViewCellSelectionStyleNone। इसे उजागर करने से रोकना चाहिए, और आप उस संपत्ति को अपने में भी जांच सकते हैं tableView:didSelectRowAtIndexPath:


3
केंडल सही है। पहले स्थान पर बुलाए जाने वाले डिसेंट्रॉ -ऑटइंडेक्सपाथ को रोकने के लिए सेबस्टियन सेलिस के उत्तर का पालन करें। हाइलाइटिंग को रोकने के लिए, आपको चयन सेटिल को भी सेट करना चाहिए।
डैनियल डिकिसन

हाँ, मुझे लगता है कि सेबेस्टियन सेलिस का उत्तर सही उत्तर होगा, धन्यवाद डैनियल
लोला रॉन

1
स्टेटिक टेबल व्यू का उपयोग करने वाले स्टोरीबोर्ड के प्रशंसक एक UITableViewCell का चयन कर सकते हैं और विशेषताओं के तहत इंस्पेक्टर सेलेक्शन फील्ड का पता लगा सकते हैं और इसे किसी को भी
Manuel BM

197

रो चयन को रोकने के लिए

के चयन को पूरी तरह से रोकने के लिए UITableViewCell, अपना UITableViewDelegateकार्यान्वयन करें tableView:willSelectRowAtIndexPath:nilयदि आप पंक्ति का चयन नहीं करना चाहते हैं तो उस पद्धति से आप वापस लौट सकते हैं ।

- (NSIndexPath *)tableView:(UITableView *)tv willSelectRowAtIndexPath:(NSIndexPath *)path
{
    // Determine if row is selectable based on the NSIndexPath.

    if (rowIsSelectable) {
        return path;
    }
    return nil;
}

यह पंक्ति को चयनित tableView:didSelectRowAtIndexPath:होने से और कहा जाने से रोकता है । हालाँकि, ध्यान दें कि यह पंक्ति को हाइलाइट होने से नहीं रोकता है।

रो हाइलाइटिंग को रोकने के लिए

यदि आप पंक्ति को स्पर्श पर दृष्टिगत रूप से हाइलाइट होने से रोकना चाहते हैं, तो आप यह सुनिश्चित कर सकते हैं कि सेल selectionStyleसेट है UITableViewCellSelectionStyleNone, या अधिमानतः आप अपना UITableViewDelegateकार्यान्वयन tableView:shouldHighlightRowAtIndexPath:निम्नानुसार कर सकते हैं :

- (BOOL)tableView:(UITableView *)tv shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Determine if row is selectable based on the NSIndexPath.

    return rowIsSelectable;
}

1
धन्यवाद! वास्तव में मुझे जो चाहिए था।
बुकानन

10
यह मेरी राय में स्वीकृत उत्तर होना चाहिए। यह वास्तव में इसे मास्क करने के बजाय समस्या को ठीक करता है।
टॉवी

4
ध्यान दें कि tableView: willSelectRowAtIndexPath: सेल को हाइलाइट करने के बाद कहा जाता है, जो एक झिलमिलाहट पैदा करेगा। Apple के विवरण से: इस विधि को तब तक नहीं कहा जाता है जब तक कि उपयोगकर्ता एक पंक्ति को नहीं छूते हैं और फिर अपनी उंगली उठाते हैं; तब तक पंक्ति का चयन नहीं किया जाता है, हालांकि इसे टच-डाउन पर हाइलाइट किया जाता है।
डैनियल

5
मैं @simplebus से सहमत हूँ। इस समाधान का उपयोग करने के लिए, आपको अचयनित पंक्तियों पर UITableViewCellSelectionStyleNone पर भी सेल सेट करना होगा। नहीं तो यह मुश्किल लग रहा है।
काइल क्लेग

फिर सबसे अच्छा जवाब अभी भी स्वीकृत उत्तर है। आप बस कुछ भी नहीं करने का विकल्प चुन सकते हैं didSelectRowAtIndexPathक्योंकि willSelectRowAtIndexPathहमेशा वैसे भी बुलाया जाएगा।
मैथ्यू क्विरोस

16

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

cell.selectionStyle = UITableViewCellSelectionStyleNone;

5
यह केवल चयन रंग को दिखाने से रोकता है, फिर didSelectRowAtIndexPathभी कहा जाता है।
ज़ेकेल

इस सवाल का भी डैनियल डिकिसन के जैसा ही जवाब है।

स्विफ्ट 2.2 अपडेट - सेल.सेलेक्शन सीन =
यूआईटेबल व्यूसीसेलसेंटेशन सीन। कोई नहीं

11

IOS 6+ के लिए ही।

आप tableView:shouldHighlightRowAtIndexPath:अपने प्रतिनिधि में विधि को लागू कर सकते हैं । यहां पढ़ें: http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.html


3
वोट कहीं अधिक होने चाहिए। यह सही उत्तर है, चयन शैली को बदलना ताकि आप यह देख सकें कि कोई सेल चयनित नहीं है, उपयोगकर्ता-अक्षमता को अक्षम करता है ताकि आप सेल पर टैप न कर सकें या चयन पर सेल को अचयनित कर सकें।
स्टुअर्ट कैम्पबेल

9

इस समस्या को भी, पहले से उल्लेखित सब कुछ करने की कोशिश की। अंतिम ट्रिक, जिसे टेबल सेल चुनने पर "ब्लू फ्लैश" से छुटकारा मिल गया था, इस लाइन को जोड़ रहा था:

self.myTableView.allowsSelection = NO;

सुनिश्चित नहीं है कि यह एक पंक्ति थी या सब कुछ संयुक्त था, लेकिन कुल भव्य परिणाम के रूप में मुझे कोई और नीले रंग का चयन या यहां तक ​​कि नीले रंग का फ्लैश भी नहीं मिला। प्रसन्न!


1
इसके साथ समस्या यह है कि यह इसे बनाता है इसलिए तालिका के सभी कक्ष चयन करने योग्य नहीं हैं। यदि आप चाहते हैं कि कुछ सेल चयन योग्य हो, और अन्य चयन करने योग्य न हों, तो यह ऐसा नहीं करेगा। सेबस्टियन के दृष्टिकोण ने मेरे लिए काम किया।
टेरी

सही है, अनुमति देता है = सभी कक्षों के लिए NO = चयन को अक्षम कर देगा।
जोम

1
क्या इस संपत्ति के लिए इंटरफ़ेस बिल्डर में एक समान संपत्ति है?
1010 को संजोएं

8

सेट cell.userInteractionEnabled = NO;


रुको, इसे ऐसे ही करो। की तरह। 'FALSE' को लोअर केस बनाएं और उस पागल अर्धविराम को खो दें। यह आपके लिए इसे स्विफ्ट करेगा। 'FALSE' बुराई और गलत था, अब 'NO' बुराई और गलत है। अगले सप्ताह तक जब 'असत्य' बुराई है और गलत है तो इस तरह से करें।
हैल


3

Apple का कहना है कि सबसे पहले आपको जो करना चाहिए था, उनमें से एक हटाएं। पंक्ति का चयन रद्द करना है

[tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:NO];

तब आप AccessoryType को चेकमार्क, या कोई नहीं, आदि बदल सकते हैं। इसलिए जब आप doSelectRowAtIndexPath दर्ज करते हैं, तो आप पंक्ति को अचयनित कर सकते हैं, और यदि इसका अर्थ चयनित नहीं है, तो बस इस पंक्ति की जांच न करें।

टेबल व्यू प्रोग्रामिंग गाइड


1
उस स्थिति में, जब कोई उपयोगकर्ता सेल को स्पर्श करता है, तो इसे थोड़े समय के लिए हाइलाइट किया जाएगा और फिर अनहेल्दी किया जाएगा - लेकिन जैसा कि मैं समझता हूं, बिंदु इसे हाइलाइटिंग से पूरी तरह से रोकना है।
कुबा सुदर 15

3

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

- (void)setSelectable:(BOOL)enabled {
    [self setSelectionStyle:UITableViewCellSelectionStyleNone];
    [self setUserInteractionEnabled:enabled];
}

- (BOOL)isSelectable {
    BOOL disabled = [self selectionStyle]==UITableViewCellSelectionStyleNone &&
                     [self isUserInteractionEnabled];
    return ! disabled;
}

3

स्विफ्ट 4:
आप यूआईटेबल व्यूडेलगेट का उपयोग करके चयन और हाइलाइटिंग को रोक सकते हैं: shouldHighlightRowAt

यह उत्तर मानता है कि आपके पास एक कस्टम सेल बनाया गया है जिसका नाम है: CustomTableViewCell
और आपने उस कस्टम सेल के नाम से एक बूलियन बनाया है: isSelectable

func tableView(_ tableView: UITableView, shouldHighlightRowAt indexPath: IndexPath) -> Bool {
    let cell = tableView.cellForRow(at: indexPath) as! CustomTableViewCell
    if cell.isSelectable == false {
        return false
    } else {
        return true
    }
}

यह सेबस्टियन सेलिस के objc उत्तर का स्विफ्ट संस्करण है।


1

अगर आपने अपना सेल इंटरफ़ेस बिल्डर में डिज़ाइन किया है, तो आप इसके लिए ' उपयोगकर्ता सहभागिता सक्षम ' से चेकबॉक्स को हटाकर ऐसा कर सकते हैं tableViewCell


0

नीले रंग के रूप में दिखने वाले चयन से बचने का एक और सरल तरीका है।

एक सेल का चयन करें जिसे आप नीला नहीं दिखाना चाहते हैं।

फिर गुण निरीक्षक (साइड पर गुण दृश्य पर शासक आइकन के बगल में ढाल आइकन) का चयन करें।

फिर 'चयन' फ़ील्ड को 'ब्लू' से बदलकर 'कोई नहीं' कर दें।

ध्यान दें, संभवतः यह अभी भी चयन कर रहा है, यह यूआई के प्रभाव से बचने के लिए यदि आप चाहते हैं तो यह केवल उतना ही चयनित नहीं होगा।


0

TableView: willDisplayCell: forRowAtIndexPath का उपयोग करें: tableView के बजाय: didSelectRowAtIndexPath: फ्लैश से छुटकारा पाने के लिए जो पहली बार सेल को छूने पर प्रकट होता है।

- (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
}

0

कुछ पंक्ति को अचयनित करने के लिए आपको UITableView प्रतिनिधि के दो तरीकों में कुछ बदलाव करने होंगे।

नीचे दी गई विधि में

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

सेल के आवंटन के बाद, नीचे दिए गए कोड को लिखें

if(indexPath.row == someCellNumber) cell.selectionStyle =UITableViewCellSelectionStyleNone;

उपरोक्त कोड सेल को हाइलाइट करने से रोकेगा, अगर उपयोगकर्ता किसी तरह चयन करने की कोशिश करता है।

नीचे इस प्रतिनिधि विधि में

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    if(indexPath.row == someCellNumber) return;

    //for other cells write the code below...
}

यदि आप if(indexPath.row == someCellNumber) return;पंक्ति नहीं लिखते हैं , तब भी चयन किया जाएगा और ऐप क्रैश होने की संभावना है



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