जवाबों:
तालिका सेल की selectionStyle
संपत्ति पर सेट करें UITableViewCellSelectionStyleNone
। इसे उजागर करने से रोकना चाहिए, और आप उस संपत्ति को अपने में भी जांच सकते हैं tableView:didSelectRowAtIndexPath:
।
के चयन को पूरी तरह से रोकने के लिए 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;
}
didSelectRowAtIndexPath
क्योंकि willSelectRowAtIndexPath
हमेशा वैसे भी बुलाया जाएगा।
इसे इस्तेमाल करो:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
didSelectRowAtIndexPath
भी कहा जाता है।
IOS 6+ के लिए ही।
आप tableView:shouldHighlightRowAtIndexPath:
अपने प्रतिनिधि में विधि को लागू कर सकते हैं
। यहां पढ़ें: http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.html
इस समस्या को भी, पहले से उल्लेखित सब कुछ करने की कोशिश की। अंतिम ट्रिक, जिसे टेबल सेल चुनने पर "ब्लू फ्लैश" से छुटकारा मिल गया था, इस लाइन को जोड़ रहा था:
self.myTableView.allowsSelection = NO;
सुनिश्चित नहीं है कि यह एक पंक्ति थी या सब कुछ संयुक्त था, लेकिन कुल भव्य परिणाम के रूप में मुझे कोई और नीले रंग का चयन या यहां तक कि नीले रंग का फ्लैश भी नहीं मिला। प्रसन्न!
Apple का कहना है कि सबसे पहले आपको जो करना चाहिए था, उनमें से एक हटाएं। पंक्ति का चयन रद्द करना है
[tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:NO];
तब आप AccessoryType को चेकमार्क, या कोई नहीं, आदि बदल सकते हैं। इसलिए जब आप doSelectRowAtIndexPath दर्ज करते हैं, तो आप पंक्ति को अचयनित कर सकते हैं, और यदि इसका अर्थ चयनित नहीं है, तो बस इस पंक्ति की जांच न करें।
दूसरा तरीका है कि युगल श्रेणी के तरीकों को जोड़ा जाए UITableViewCell
। मुझे सेबस्टियंस (यह भी अच्छा) के जवाब से बेहतर लगता है क्योंकि मैं अपनी टेबल बना रहा हूं। मैंने सोचा कि यह किसी और के लिए उपयोगी हो सकता है।
- (void)setSelectable:(BOOL)enabled {
[self setSelectionStyle:UITableViewCellSelectionStyleNone];
[self setUserInteractionEnabled:enabled];
}
- (BOOL)isSelectable {
BOOL disabled = [self selectionStyle]==UITableViewCellSelectionStyleNone &&
[self isUserInteractionEnabled];
return ! disabled;
}
स्विफ्ट 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 उत्तर का स्विफ्ट संस्करण है।
नीले रंग के रूप में दिखने वाले चयन से बचने का एक और सरल तरीका है।
एक सेल का चयन करें जिसे आप नीला नहीं दिखाना चाहते हैं।
फिर गुण निरीक्षक (साइड पर गुण दृश्य पर शासक आइकन के बगल में ढाल आइकन) का चयन करें।
फिर 'चयन' फ़ील्ड को 'ब्लू' से बदलकर 'कोई नहीं' कर दें।
ध्यान दें, संभवतः यह अभी भी चयन कर रहा है, यह यूआई के प्रभाव से बचने के लिए यदि आप चाहते हैं तो यह केवल उतना ही चयनित नहीं होगा।
TableView: willDisplayCell: forRowAtIndexPath का उपयोग करें: tableView के बजाय: didSelectRowAtIndexPath: फ्लैश से छुटकारा पाने के लिए जो पहली बार सेल को छूने पर प्रकट होता है।
- (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
कुछ पंक्ति को अचयनित करने के लिए आपको 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;
पंक्ति नहीं लिखते हैं , तब भी चयन किया जाएगा और ऐप क्रैश होने की संभावना है
tableView:shouldHighlightRowAtIndexPath:
के रूप में नीचे आयुष द्वारा नोट