2010-10-20 13 views
32

लौटने मैं ल्यूक रेडपाथ के सुझाव यहाँ का पालन किया - Selected UItableViewCell staying blue when selected - जब मूल तालिका दृश्य की ओर लौटने पंक्ति का चयन रद्द करने, लेकिन मैं यह काम नहीं कर प्राप्त कर सकते हैं। वास्तव में विधि ट्रिगर नहीं होती है।तालिका दृश्य पंक्ति का चयन रद्द करने जब

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES]; 
} 

मुझे लगता है इस वजह से वर्ग एक UITableViewController नहीं है, लेकिन निब अप करने के लिए जुड़ा हुआ एक संपत्ति के रूप में tableView के साथ एक UIViewController

मैं एक ही व्यवहार कैसे प्राप्त होगा - यानी अ-चयनित जब लौटने?

+0

यह जब तक tableView सही ढंग से झुका है कोई फर्क नहीं करना चाहिए। आपको इसे 'didSelectRowAtIndexPath' में डालने में सक्षम होना चाहिए: और यह काम करता है। आप शायद '[self.tableView indexPathForSelectedRow]' रिटर्न के त्वरित NSLog चेक करना चाहें क्योंकि यह वास्तव में शून्य लौट रहा है। – iwasrobbed

+0

मैंने इसका इस्तेमाल किया लेकिन एक मुद्दा था जहां सेल (पृष्ठभूमि इत्यादि) में चीजें बदलना तुरंत दिखाई नहीं दे रहा था। reloadRowsAtIndexPaths जोड़ना: didDeselectRowAtIndexPath में: चाल – nh32rg

उत्तर

15

आप एक navigationController का उपयोग कर रहे हैं, तो आप अपने प्रतिनिधि के साथ ऐसा कर सकते हैं:

- (void)navigationController: (UINavigationController *)navigationController 
     didShowViewController: (UIViewController *)viewController 
        animated: (BOOL)animated 
{ 
    [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES]; 
} 

लेकिन आप शो नियंत्रक जो आप =/

[संपादित करें] बनाएं चाहते है कि क्या जांच करने के लिए है आउटलेट और navigationController

@interface MyInt <UINavigationControllerDelegate> 
{ 
    IBOutlet UINavigationController *navigation; 
    ... 
} 
@property (nonatomic, retain) UINavigationController *navigation; 
... 
@end 

@implementation MyInt 
@syntesize navigation; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self.navigation setDelegate: self]; 
} 
... 

@end 
+0

मेरे नव नियंत्रक मेरी निब में बनाई गई है किया था, इसलिए यह कोई इसी वर्ग है।क्या इसके आसपास कोई रास्ता है? – cannyboy

+0

आप इसे आईबीओलेटलेट ivar में मैप कर सकते हैं। –

+0

मेरा सेटअप यह है कि मुझे एक संबंधित एनआईबी के साथ मेनव्यू कंट्रोलर क्लास मिला है। उस निब में UITabBarController (मेनव्यू कंट्रोलर में एक आईबीओलेट संपत्ति 'टैबबार नियंत्रक' भी है)। उस टैब बार के भीतर कई यूनाविगेशन नियंत्रक हैं। इन्हें कोड में संदर्भित नहीं किया गया है। तो मुझे यकीन नहीं है कि इनमें से किसी भी एनवी नियंत्रकों का उपयोग कैसे करें – cannyboy

8

को आईबी में लिंक आप पंक्ति प्रोग्राम के रूप में चयन कर रहे हैं? यदि ऐसा है, तो [cellToBeSelected setSelected:YES]; का उपयोग कर पंक्ति का चयन करते समय मुझे एक ही समस्या थी।

UITableViewController की selectRowAtIndexPath:animated:scrollPosition: विधि का उपयोग करके यह वर्तमान चयनित इंडेक्सपाथ का ट्रैक रखता है।

वास्तव में, clearsSelectionOnViewWillAppear सही पर सेट किया जाता है, एक अचयनित पंक्तियों मैन्युअल जरूरत नहीं है।

21

क्यों तुम सिर्फ प्रतिनिधि विधि

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES]; 

} 
+2

आपको '[self.tableView indexPathForSelectedRow]' करने की ज़रूरत नहीं है, इंडेक्सपाथ पहले से ही एक पैरामीटर है, और आप इसे वहां डाल सकते हैं। –

+0

इसके अलावा, यदि आप प्रतिनिधि विधि का उपयोग कर रहे हैं, तो आपको 'self.tableView' के बजाय' tableView' पैरामीटर का उपयोग करना चाहिए, क्योंकि यदि आपके पास एकाधिक तालिकादृश्य हैं तो वे संभावित रूप से भिन्न हो सकते हैं। –

8

मैं एक ही समस्या खड़ी रेखा से हटना में इसका चयन रद्द नहीं है, लेकिन डिबगिंग के बाद मुझे पता चला indexPathForSelectedRow गिनती 0 मेरी कोड तो मैं जाँच की डबल था और देखा मैं था कॉलिंग

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    // some code... 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
} 

इस लाइन को हटाने के बाद यह अपेक्षा की गई थी।

+0

यह एक पूरी तरह से स्पष्ट गलती थी जिसने मुझे पकड़ लिया। मुझे लगता है कि मेरे समेत कई लोगों ने आदत से प्रतिनिधि को अचयनित कर दिया है। – micnguyen

4

बहुत ही सरल: इस लाइन की कोशिश करो।

जोड़े में deselectRowAtIndexPath अपने didSelectRowAtIndexPath

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

} 
0
-(BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return YES; 
} 

-(void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [[tableView cellForRowAtIndexPath:indexPath] setBackgroundColor:[UIColor grayColor]]; 
} 

-(void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [[tableView cellForRowAtIndexPath:indexPath] setBackgroundColor:[UIColor clearColor]]; 
} 
+0

कृपया वर्णन करें कि यह समाधान क्यों है। परिवर्तन/चाल क्या है? –

1

स्विफ्ट 3,0

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
      tableView.deselectRow(at: indexPath, animated: true) 
    //Write Your Other code Here. 
      } 

यह पंक्ति का चयन रद्द करेंगे आप उस पर क्लिक करने के बाद।

संबंधित मुद्दे