जब आप एक पंक्ति को एक में टैप करते हैं UITableView
, तो पंक्ति को हाइलाइट किया जाता है और चुना जाता है। क्या यह अक्षम करना संभव है ताकि एक पंक्ति का दोहन कुछ भी न करे?
जब आप एक पंक्ति को एक में टैप करते हैं UITableView
, तो पंक्ति को हाइलाइट किया जाता है और चुना जाता है। क्या यह अक्षम करना संभव है ताकि एक पंक्ति का दोहन कुछ भी न करे?
जवाबों:
मेरे लिए, निम्नलिखित ने ठीक काम किया:
tableView.allowsSelection = false
इसका मतलब है कि didSelectRowAt#
बस काम नहीं करेगा। यह कहना है, तालिका की एक पंक्ति को छूने, जैसे, बिल्कुल कुछ भी नहीं होगा। (और इसलिए, जाहिर है, एक चयनित-एनीमेशन कभी नहीं होगा।)
(ध्यान दें कि यदि कोशिकाओं पर, आपके पास UIButton
या कोई अन्य नियंत्रण है, तो निश्चित रूप से वे नियंत्रण अभी भी काम करेंगे। टेबल सेल पर आपके द्वारा किए जाने वाले किसी भी नियंत्रण, यूआईटेबल व्यू की पूरी तरह से असंबंधित हैं जो आपको "पंक्ति का चयन करने" की अनुमति देता है। का उपयोग कर didSelectRowAt#
।)
एक और ध्यान देने वाली बात यह है कि: यह तब काम नहीं करता है जब UITableView
संपादन मोड में हो। संपादन मोड में सेल चयन को प्रतिबंधित करने के लिए नीचे दिए गए कोड का उपयोग करें:
tableView.allowsSelectionDuringEditing = false
selectionStyle
प्रॉपर्टी को सेल पर सेट करने की आवश्यकता है : cell.selectionStyle = UITableViewCellSelectionStyle.None
स्विफ्ट में, या cell.selectionStyle = UITableViewCellSelectionStyleNone
ऑब्जेक्टिव-सी में।
tableView.allowSelection = false
tableViewDidSelectRowAtIndexPath
कॉल करना चाहते हैं, cell.selectionStyle = .None
तो वांछित है। यदि आप उस प्रतिनिधि फ़ंक्शन को कॉल करने के लिए नहीं चाहते हैं या देखभाल नहीं करते हैं (यानी टेबल व्यूसेल में एक टेक्स्टफील्ड होना) सेटिंग tableView.allowsSelection = false
ठीक है।
आपको बस इतना करना है कि UITableViewCell
उदाहरण के आधार पर चयन शैली सेट करें :
उद्देश्य सी:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
या
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
स्विफ्ट 2:
cell.selectionStyle = UITableViewCellSelectionStyle.None
स्विफ्ट 3 और 4.x:
cell.selectionStyle = .none
इसके अलावा, सुनिश्चित करें कि आप या तो -tableView:didSelectRowAtIndexPath:
अपने टेबल व्यू डेलिगेट में लागू नहीं करते हैं या स्पष्ट रूप से उन कक्षों को बाहर कर दें जिन्हें आप लागू नहीं करना चाहते हैं।
क्योंकि मैंने हाल ही में इस पोस्ट को पढ़ा है और इसने मेरी मदद की है, मैं सभी उत्तर (पोस्टीरिटी के लिए) को समेकित करने के लिए एक और उत्तर देना चाहता था।
तो, आपके वांछित तर्क और / या परिणाम के आधार पर वास्तव में 5 अलग-अलग उत्तर हैं:
1. सेल के किसी भी अन्य बातचीत बदले बिना नीले हाइलाइटिंग निष्क्रिय कर दें:
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
मैं इसका उपयोग तब करता हूं जब मेरे पास एक UIButton है - या कुछ अन्य नियंत्रण (ओं) - जो कि एक UITableViewCell में होस्ट किए गए हैं और मैं चाहता हूं कि उपयोगकर्ता नियंत्रण के साथ बातचीत करने में सक्षम हो लेकिन सेल नहीं।
नोट : जैसा कि टोनी मिलियन ने ऊपर उल्लेख किया है, यह रोकता नहीं है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
tableView:shouldHighlightRowAtIndexPath:
, जो आम तौर पर (हमेशा नहीं) है।
इस बात पर विचार करने के लिए कि इसे लागू करने में मेरे अपने अनुभव के आधार पर मुझे सही उत्तर देने हैं:
यदि आप केवल कुछ कक्षों के लिए चयन को अक्षम करना चाहते हैं, तो उपयोग करें:
cell.userInteractionEnabled = NO;
चयन को रोकने के साथ-साथ, यह टेबलव्यू को भी रोकता है: didSelectRowAtIndexPath: यह उन कोशिकाओं के लिए कहा जा रहा है जिन्होंने इसे सेट किया है। (क्रेडिट इस जवाब के लिए टोनी मिलियन में जाता है, धन्यवाद!)
यदि आपके पास अपनी कोशिकाओं के बटन हैं, जिन्हें क्लिक करने की आवश्यकता है, तो आपको इसके बजाय:
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
और आपको सेल के किसी भी क्लिक को अनदेखा करना होगा - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
।
यदि आप संपूर्ण तालिका के लिए चयन को अक्षम करना चाहते हैं, तो उपयोग करें:
tableView.allowsSelection = NO;
(साभार पाउलो डी बारोस को, धन्यवाद!)
IOS 6.0 के रूप में, UITableViewDelegate
है tableView:shouldHighlightRowAtIndexPath:
। (IOS डॉक्यूमेंटेशन में इसके बारे में पढ़ें ।)
यह विधि आपको सेल की चयन शैली को बदलने, सेल के ईवेंट हैंडलिंग के साथ खिलवाड़ करने userInteractionEnabled = NO
, या यहां प्रलेखित किसी भी अन्य तकनीकों के बिना विशिष्ट पंक्तियों को अस्वाभाविक (और स्पष्ट रूप से, अचूक) के रूप में चिह्नित करने देती है।
आप यह भी चयन करके खुद बिल्डर इंटरफ़ेस से पंक्ति के अक्षम चयन कर सकते हैं NoSelection
से selection
निरीक्षक फलक में (UITableView गुण का) विकल्प के रूप में छवि के नीचे में दिखाया गया है
यदि आप चयन केवल फ़्लैश के लिए करना चाहते हैं, तो चयनित स्थिति में नहीं, आप कॉल कर सकते हैं, अंदर
didSelectRowAtIndexPath
निम्नलिखित
[tableView deselectRowAtIndexPath:indexPath animated:YES];
इसलिए यह चयनित स्थिति को फ्लैश करेगा और वापस लौटाएगा।
मामले में किसी को भी स्विफ्ट के लिए जवाब चाहिए :
cell.selectionStyle = .None
cellForRowAtIndexPath
इस कोड को लिखने में यही मेरा उपयोग है :
cell.selectionStyle = UITableViewCellSelectionStyleNone;
से UITableViewDelegate
प्रोटोकॉल आप विधि का उपयोग कर सकते हैं willSelectRowAtIndexPath
और return nil
आप पंक्ति का चयन नहीं करना चाहते हैं।
उसी तरह आप willDeselectRowAtIndexPath
विधि का उपयोग कर सकते हैं और return nil
यदि आप पंक्ति को रद्द नहीं करना चाहते हैं।
1- आपको बस इतना करना है किUITableViewCell
उदाहरण के आधार पर चयन शैली सेट करें :
उद्देश्य सी:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
या
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
स्विफ्ट 2:
cell.selectionStyle = UITableViewCellSelectionStyle.None
स्विफ्ट 3:
cell.selectionStyle = .none
2 - लागू न करें - tableView:didSelectRowAtIndexPath:
अपने टेबल व्यू में delegate
या स्पष्ट रूप से उन कोशिकाओं को बाहर करें जिन्हें आप लागू करना चाहते हैं, यदि आप कोई कार्रवाई नहीं करना चाहते हैं।
3 - इसके अलावा, आप इसे स्टोरीबोर्ड से भी कर सकते हैं। तालिका दृश्य कक्ष के अंतर्गत तालिका दृश्य कक्ष और गुण निरीक्षक पर क्लिक करें, चयन के बगल में स्थित ड्रॉप डाउन को चयन में बदलें।
4 - आप (iOS) Xcode 9, स्विफ्ट 4.0 में नीचे दिए गए कोड का उपयोग करके टेबल सेल हाइलाइट को अक्षम कर सकते हैं
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "OpenTbCell") as! OpenTbCell
cell.selectionStyle = .none
return cell
}
नीचे स्निपेट हाइलाइटिंग को अक्षम करता है, लेकिन यह कॉल को भी अक्षम करता है didSelectRowAtIndexPath
। इसलिए यदि आप लागू नहीं कर रहे हैं didSelectRowAtIndexPath
तो नीचे दी गई विधि का उपयोग करें। जब आप तालिका बना रहे हों तो इसे जोड़ा जाना चाहिए। यह बटन पर और UITextField
सेल के अंदर काम करेगा ।
self.tableView.allowsSelection = NO;
नीचे स्निपेट हाइलाइटिंग को अक्षम करता है और यह कॉल को अक्षम नहीं करता है didSelectRowAtIndexPath
। सेल की चयन शैली को किसी में भी सेट न करेंcellForRowAtIndexPath
cell.selectionStyle = UITableViewCellSelectionStyleNone;
नीचे स्निपेट सेल पर सब कुछ अक्षम करता है। यह करने के लिए बातचीत को निष्क्रिय कर देगा buttons
, textfields
:
self.tableView.userInteractionEnabled = false;
नीचे Swift
उपरोक्त Objective-C
समाधान के बराबर हैं:
पहले समाधान का प्रतिस्थापन
self.tableView.allowsSelection = false
दूसरा समाधान का प्रतिस्थापन
cell?.selectionStyle = UITableViewCellSelectionStyle.None
तीसरे समाधान का प्रतिस्थापन
self.tableView.userInteractionEnabled = false
टाइप करने की कोशिश करें:
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)
}
मैं काफी गहराई से भी इससे जूझ रहा हूं, मेरे पास संपत्ति UITableViewCell
के उपयोग पर प्रतिबंध है userInteractionEnabled
। मेरे पास सेटिंग्स के लिए 3 सेल स्टैटिक टेबल है, 2 तारीखों के साथ, 1 ऑन / ऑफ स्विच के साथ। स्टोरीबोर्ड / आईबी के बारे में खेलने के बाद मैं नीचे एक गैर-चयन करने में कामयाब रहा, लेकिन जब आप इसे टैप करते हैं तो शीर्ष पंक्तियों में से एक से चयन गायब हो जाता है। यहाँ मेरी सेटिंग्स की एक WIP छवि है UITableView:
यदि आप तीसरी पंक्ति में कुछ भी नहीं करते हैं, तो चयन दूसरी पंक्ति पर रहेगा। कार्यक्षमता व्यावहारिक रूप से ऐप्पल के कैलेंडर ऐप के ऐड इवेंट टाइम सिलेक्शन स्क्रीन की कॉपी है।
कोड आश्चर्यजनक रूप से संगत है, IOS2 = / के लिए नीचे सभी तरह:
- (NSIndexPath *)tableView: (UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == 2) {
return nil;
}
return indexPath;
}
यह चयन शैली को किसी के साथ सेट करने के संयोजन के रूप में काम करता है, इसलिए सेल टच डाउन घटनाओं पर झिलमिलाहट नहीं करता है
आपको बस इस कोड को cellForRowAtIndexPath में डालना है
सेल की चयन संपत्ति को अक्षम करने के लिए: (सेल को टैप करते समय)।
cell.selectionStyle = UITableViewCellSelectionStyle.None
मैं इसका उपयोग कर रहा हूं, जो मेरे लिए काम करता है।
cell?.selectionStyle = UITableViewCellSelectionStyle.None
जबकि चयन के दौरान किसी पंक्ति को हाइलाइट दिखाने से रोकने के लिए यह सबसे अच्छा और आसान उपाय है
cell.selectionStyle = UITableViewCellSelectionStyleNone;
मैं यह भी सुझाव देना चाहता हूं कि यह संक्षेप में उपयोगी है कि पंक्ति को चुना गया है और फिर इसे बंद कर दिया गया है। यह उपयोगकर्ताओं को इस बात की पुष्टि के साथ सचेत करता है कि वे क्या चयन करने का इरादा रखते हैं:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:NO];
...
}
UITableViewCellSelectionStyleNone
यदि आप ऐसा नहीं करना चाहते हैं / उपयोग नहीं कर सकते हैं, तो आप उसी प्रभाव को प्राप्त करने के लिए पृष्ठभूमि का रंग निर्धारित कर सकते हैं UITableViewCellSelectionStyleNone
।
आप निम्नलिखित की तरह कोड का उपयोग करेंगे:
UIView *backgroundColorView = [[UIView alloc] init];
backgroundColorView.backgroundColor = [UIColor clearColor];
backgroundColorView.layer.masksToBounds = YES;
[cell setSelectedBackgroundView: backgroundColorView];
यह आपके प्रदर्शन को नीचा दिखा सकता है क्योंकि प्रत्येक सेल में एक अतिरिक्त रंगीन दृश्य जोड़ रहा है ।
आप उपयोग कर सकते हैं :
cell.selectionStyle = UITableViewCellSelectionStyleNone;
अपने UITableView के सूचकांक पथ विधि में पंक्ति के लिए सेल में।
इसके अलावा आप उपयोग कर सकते हैं:
[tableView deselectRowAtIndexPath:indexPath animated:NO];
टेबलव्यू डिसेलेरोवेटिंडएक्सथैथ विधि में।
cell.selectionStyle = UITableViewCellSelectionStyle.none
स्विफ्ट 3 में है
cell.selectionStyle = UITableViewCellSelectionStyleNone;
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
[cell setSelected:NO animated:NO];
[cell setHighlighted:NO animated:NO];
हैप्पी कोडिंग !!!
selection
, और निश्चित रूपhighlighting
से उसी के साथ अक्षम हो जाता है। कई उच्च मत वाले उत्तर बताते हैं कि कैसेdisable selection
अक्षम करना है और कैसे पता नहीं हैhighlighting
। उपयोग पर प्रकाश डाला केवल अक्षम करने के लिएcell.selectionStyle = .None
या करने के लिए जानेstoryboard / cell / Selection = None