2013-02-19 18 views
29

पर वापस आते हैं तो एक यूटिव्यूव्यू सेल को अचयनित करने के लिए मेरे पास एक यूटिव्यूव्यू सेल है जब उपयोगकर्ता इसे चुनता है और उसके बाद एक विस्तार दृश्य पर धक्का दिया जाता है। जब वे टेबल व्यू व्यू कंट्रोलर पर वापस आते हैं तो मैं सेल को हाइलाइट करना चाहता हूं।जब उपयोगकर्ता व्यू कंट्रोलर

मैं इसे पूरा करने के बारे में कैसे जाउंगा?

मैं देख रहा हूं [cell.textLabel setHighlighted:NO]; व्यूविलपियर में, लेकिन अगर मैं इसे वहां रखता हूं तो सेल अव्यवस्थित है। किसी भी मदद के लिए

धन्यवाद

+0

यदि आप स्टोरीबोर्ड का उपयोग कर रहे हैं तो आप केवल स्पष्ट चयन विशेषता देख सकते हैं। –

+0

@AlexanderofNorway वह संपत्ति केवल तभी दिखाई देती है जब आप UITableViewController – commando24

उत्तर

71

कोशिश आप UITableViewController उपवर्ग तो बस सेट संपत्ति

self.clearsSelectionOnViewWillAppear = YES; 

viewDidAppear पर किसी और का उपयोग कर, तो बस फोन

NSIndexPath *indexPath = self.tableView.indexPathForSelectedRow; 
if (indexPath) { 
    [self.tableView deselectRowAtIndexPath:indexPath animated:animated]; 
} 

// MARK: - Swift 3 
if let indexPath = tableView.indexPathForSelectedRow { 
    tableView.deselectRow(at: indexPath, animated: animated) 
} 
+0

का उपयोग सही करते हैं! धन्यवाद – hanumanDev

+4

नोट: 'clearsSelectionOnViewWillAppear' ज्यादातर समय काम करता है। यदि आप ISO7 पर वापस "वापस वापस स्वाइप करें" तालिका में वापस देखेंगे तो यह काम नहीं करेगा। दृश्य नियंत्रक। दूसरी विधि जोड़ा गया अच्छा एनीमेशन के साथ, हर समय काम करता है। – Byte

+4

मुझे लगता है कि viewDillAppear देखने के बजाय ViewWillAppear का उपयोग करना बेहतर है - एनीमेशन-टाइमिंग UITableViewController के साथ अधिक संगत दिखता है। – chrisbuchholz

4

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Deselect the row which was tapped 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
} 
0

या कुछ सुरुचिपूर्ण तरीका =)

NSArray *arrayWithPaths = [tableView indexPathsForVisibleRows]; 
for (NSIndexPath *path in arrayWithPaths) 
{ 
    [tableview deselectRowAtIndexPath:path animated:NO]; 
} 
6

मैंने टिप्पणी के बजाय इसे उत्तर देने का निर्णय लिया।

आप स्टोरीबोर्ड उपयोग कर रहे हैं: अपने UITableViewController पर लिए क्लिक करें -> "चयन: प्रकटन पर साफ़ करें" चेक बॉक्स

11

स्विफ्ट 3,0

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 

    if let selectionIndexPath = self.tableView.indexPathForSelectedRow { 
     self.tableView.deselectRow(at: selectionIndexPath, animated: animated) 
    } 
} 
+0

के समान होगा (आप कुछ क्लीनर और स्विफ्टियर कोड के लिए 'tableView' के प्रत्येक आमंत्रण से पहले' स्वयं 'को हटा सकते हैं।) – royalmurder

+0

निश्चित रूप से । मैं बस नियंत्रक से संबंधित चर के बारे में स्पष्ट होना पसंद करता हूं इसलिए मैं उन्हें स्थानीय चर के साथ भ्रमित नहीं करता हूं। बस एक व्यक्तिगत वरीयता। –

+0

@royalmurder आप इसे निश्चित रूप से हटा सकते हैं; यह सिर्फ शैली का मामला है। मैं व्यक्तिगत रूप से ivars से कक्षा के गुणों को अलग करने के लिए स्वयं का उपयोग करना पसंद करता हूं, जैसा कि डस्टिन ने उल्लेख किया है। भले ही, यहां स्वयं के उपयोग की कार्यक्षमता पर कोई प्रभाव नहीं पड़ता है। – vikzilla

2

तेज 3

func clearOnAppearance() { 
    for indexPath in tableView.indexPathsForSelectedRows ?? [] { 
     tableView.deselectRow(at: indexPath, animated: true) 
    } 
} 
संबंधित मुद्दे