2011-12-16 14 views
16

से लौटने पर अचयनित नहीं करते हैं मेरे पास स्टोरीबोर्ड में सेल्स के साथ एक UITableView है, और एक सेग्यू को दूसरे दृश्य में जोड़ने से संबंधित है।UITableViewCells एक segue

जब आप एक सेल यह सेल चयन एनीमेशन (मेरे मामले में, सेल ग्रे मोड़) को प्रदर्शित करता है और स्क्रीन पर अन्य दृश्य धक्का का चयन करें। लेकिन जब आप टेबलव्यू पर वापस आते हैं, तो डिसेलेक्शन एनीमेशन बिल्कुल नहीं दिखाता है (चयन एनीमेशन के विपरीत)। चूंकि मैं सिर्फ एक सेग्यू का उपयोग कर रहा हूं, इसलिए मुझे उम्मीद है कि इसे डिफ़ॉल्ट रूप से ख्याल रखा जाए।

क्या डीसेक्शन एनीमेशन दिखाने के लिए इसे मजबूर करने का कोई तरीका है?

+0

के लिए मिला यहाँ समाधान: http://stackoverflow.com/प्रश्न/1840614/क्यों होती है--UITableView सेल रहने-पर प्रकाश डाला। –

उत्तर

11

segues के उपयोग के बारे में सुनिश्चित नहीं हैं viewWill... और viewDid... तरीकों में से super कार्यान्वयन बुला रहे हैं, लेकिन मैं अक्सर डेटा ताज़ा करने के लिए जब एक दृश्य नियंत्रक प्रकट होता है चाहते हैं। यदि आप तालिका को फिर से लोड करते हैं, तो आप चयन पंक्ति को साफ़ करते हैं। यहां कुछ कोड है जो मैं एक चयनित पंक्ति को बनाए रखने के लिए उपयोग करता हूं और लौटने पर एनीमेशन को अचयनित करता हूं। यह मामला हो सकता है कि यह आपकी मदद कर सके ताकि मैं इसे यहां पोस्ट करूंगा।

-(void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    NSIndexPath *indexPath = [tableView indexPathForSelectedRow]; 
    [tableView reloadData]; 
    if(indexPath) { 
     [tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; 
    } 
} 

-(void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 

    NSIndexPath *indexPath = [tableView indexPathForSelectedRow]; 
    if(indexPath) { 
     [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
    } 
} 
+0

मैं तालिका डेटा पुनः लोड करता हूं, लेकिन आपका समाधान काम नहीं करता है। (मैंने पहले यह कोशिश की थी, लेकिन यह सुनिश्चित करने के लिए कि मैंने दोबारा प्रयास किया।) –

+0

क्या आप कहीं और तालिका को फिर से लोड कर रहे हैं? यह भी सुनिश्चित करें कि आप ViewWillAppear को कॉल करने से पहले चयनित पंक्ति को हटा नहीं रहे हैं। आपके डेटा में परिवर्तन कैसे होता है, इस पर निर्भर करता है कि एक ही पंक्ति का चयन करने से आपके लिए काम नहीं हो सकता है। – Chase

+0

मैंने इसे स्वीकार किया, भले ही मैंने इस समस्या को हल नहीं किया। मुझे लगता है कि मुझे कहीं पुनः लोड करना होगा। –

22

यदि आपका व्यू कंट्रोलर UITableViewController और clearsSelectedOnViewWillAppear का उप-वर्ग था, तो यह स्वचालित रूप से संभाला जाएगा YES (जो डिफ़ॉल्ट मान है) पर सेट किया गया था।

आपके मामले में आप इस एक ही सटीक तरीका UITableViewController यह होता है कि कर सकते हैं। चयनित पंक्ति को -viewWillAppear: में अचयनित करें।

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    NSIndexPath *selectedIndexPath = [self.tableView indexPathForSelectedRow]; 
    [self.tableView deselectRowAtIndexPath:selectedIndexPath animated:YES]; 
} 
+0

मेरा व्यू कंट्रोलर UITableViewController का उप-वर्ग है। सेल को दिखाए जाने पर अचयनित किया जाता है, यह सिर्फ एनीमेशन नहीं दिखाता है - इसे शुरू करने के लिए अचयनित किया जाता है। (बस मामले में, मैंने आपके द्वारा सुझाए गए प्रयासों की कोशिश की और यह काम नहीं किया।) –

+0

ने 'UINavigationController' में' UITableViewController' के साथ एक नमूना प्रोजेक्ट बनाया है जो किसी अन्य दृश्य नियंत्रक को धक्का देता है। सभी segues के साथ स्टोरीबोर्ड का उपयोग करके सेट अप और दृश्य नियंत्रक पॉपिंग deselection एनीमेशन प्रदर्शित करता है। शायद मूल दृश्य नियंत्रक का दृश्य अनलोड किया जा रहा है ताकि तालिका की चयन स्थिति खो जाए। यह उच्च स्मृति दबाव स्थितियों में हो सकता है। –

+0

मेरा ऐप सेट अप के रूप में सेट किया गया है (लेकिन टैब के साथ भी), और यह कोर डेटा का उपयोग करता है। अधिकांश अनुरोध अभी केवल दो या तीन रिकॉर्ड हैं (परीक्षण के लिए), इसलिए मुझे नहीं लगता कि यह स्मृति संसाधनों पर एक नाली होगी। –

9

सुनिश्चित करें कि आप

+0

मैं हर विरासत विधि में ऐसा कर रहा हूं। –

+0

आप अपने UITableViewController पर कैसे लौट रहे हैं? क्या आप स्टोरीबोर्ड में 'पुश' सेग्यू का उपयोग करते समय डिफ़ॉल्ट बैक बटन का उपयोग कर रहे हैं जो निःशुल्क आता है? –

+0

मैं हूं। मेरा UITableViewController एक UINavigationController के अंदर है, और मैं नेविगेशन नियंत्रक बनाता है बैक बटन के साथ विस्तार दृश्य से तालिकादृश्य पर वापस आ गया। (और segue एक '' push'' प्रकार है) –

1

स्विफ्ट अपडेट: -

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(true) 
    if tableView.indexPathForSelectedRow != nil { 
     let indexPath: NSIndexPath = tableView.indexPathForSelectedRow! 
     tableView.deselectRowAtIndexPath(indexPath, animated: true) 
    } 
} 
1

बेहतर स्विफ्ट अद्यतन:

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

    if let path = tableView.indexPathForSelectedRow { 

     tableView.deselectRowAtIndexPath(path, animated: true) 
    } 
} 
2

स्विफ्ट 3

override func viewWillAppear(_ animated: Bool) { 

    super.viewWillAppear(animated) 
    if let path = tableView.indexPathForSelectedRow { 

     tableView.deselectRow(at: path, animated: true) 
    } 
} 
संबंधित मुद्दे