2012-03-20 10 views
8

के माध्यम से UITableView को अपडेट करने पर चयन को ध्यान में रखते हुए मैं ऐप्पल के कैलेंडर एप्लिकेशन की शुरुआत के समय और समाप्ति समय सेटिंग के समान दृश्य को लागू करने की कोशिश कर रहा हूं। मेरे पास दृश्य बहुत अच्छा लग रहा है, लेकिन मैं दो समस्याओं में भाग रहा हूं। सबसे पहले, मैं पहले पंक्ति को स्वचालित रूप से चुनना चाहता हूं।reloadData

NSIndexPath *indexPath=[NSIndexPath indexPathForRow:0 inSection:0]; 
[dateTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionBottom]; 

हालांकि, एक एनीमेशन शो, नेत्रहीन rown का चयन जब दृश्य लोड किया जाता है, मैं चाहता हूँ यह पहले से चयनित किया जाना है जब दृश्य लोड: मैं इन सबसे छुटकारा इस काम कर का उपयोग कर सकते है।

दूसरी, और अधिक महत्वपूर्ण बात यह है कि जब मैं पिकर अपडेट होने के बाद डेटा को फिर से लोड करता हूं तो मैं चयन खो देता हूं, और मेरा कार्य बस काम नहीं करता है।

अब मुझे पता है कि यह पुनः लोडडेटा की डिफ़ॉल्ट कार्रवाई है, मैं अपने लक्ष्य को पूरा करने के लिए एक वैकल्पिक विधि की तलाश में हूं, या शायद मैं वर्तमान चयन को अचयनित करने के लिए पुनः लोड डेटा कैसे बढ़ा सकता हूं।

मेरे कार्य नीचे शामिल है:

-(IBAction)dateChanged 
{ 

    NSIndexPath *index = self.dateTableView.indexPathForSelectedRow; 
    if(index == 0) 
    { 
     if (self.date2 == plusOne) { 
      self.date = [datePicker date]; 
      plusOne = [self.date dateByAddingTimeInterval:60*60]; 
      self.date2 = plusOne; 
     } 
     else 
     { 
      self.date = [datePicker date]; 
     } 

    } 
    else{ 
     self.date2 = [datePicker date]; 
    } 

    [dateTableView reloadData]; 
} 

नोट: PlusOne एक चर है कि शुरू में वर्तमान समय से एक घंटे इंगित करता है।

अग्रिम धन्यवाद!

+0

आप अपना पहला कोड ब्लॉक किस तरीके से कॉल कर रहे हैं? – MishieMoo

उत्तर

13

पहली समस्या के लिए, एनिमेटेड सेट करें: विधि कॉल पर नहीं। आप वर्तमान में इसे YES पर सेट कर रहे हैं।

[dateTableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionBottom]; 

दूसरी समस्या के लिए, यह वास्तव में स्पष्ट है कि तुम क्या डेटा को फिर से लोड करने के बाद चयन करने के लिए कोशिश कर रहे हैं नहीं है, लेकिन मैं इस लाइन के साथ एक समस्या देखें:

if(index == 0) 

आप अगर सूचक के लिए कह रहे ऑब्जेक्ट 0 है। मुझे लगता है कि आप जो चाहते हैं वह index == nil या index.section == 0 && index.row == 0 या ऐसा कुछ जांचने के लिए है।

वैसे भी, यदि आप UITableView पर reloadData पर कॉल करते हैं, तो आप चयन खोने जा रहे हैं। उस बिंदु पर, आपको एक नई पंक्ति चुननी होगी। यदि आपके डेटा मॉडल में कोई आइटम है जिसे आप चुनना चाहते हैं, तो आपको यह पता लगाने की आवश्यकता है कि यह कहां है और यह कहां है कि यह तालिका में कहां होगा (आपको यह पता होना चाहिए क्योंकि आप UITableViewDataSource प्रतिनिधि में वह जानकारी प्रदान कर रहे हैं तरीकों।)। वैकल्पिक रूप से, यदि आप dateChanged की पहली पंक्ति में सहेजे गए NSIndexPath का चयन करना चाहते हैं, तो बस डेटा को पुनः लोड करने के बाद इसे चुनें।

+0

धन्यवाद! विश्वास नहीं कर सकता मैं इसे याद किया! – Jerome

+0

बहुत बढ़िया, आपने जो कहा उसके आधार पर इसे काम करने में सक्षम था। जोड़ा गया index.row और एनीमेशन के बिना reloadData के बाद संशोधित। धन्यवाद एक टन आदमी, तुम चट्टान! – Jerome

+0

@BrianCooley datatableview लाइन लिखने के लिए कहां ?? – Muju

1

पहली समस्या के लिए, एक कोड में अपना कोड लिखें SelectRowAtIndexPath: एक विधि में। तुम तो didSelectRowAtIndexPath से इस विधि कॉल कर सकते हैं: आप indexPath की तरह अपने कार्य करने के लिए तर्क के रूप में पास करना चाहिए,

-(void)doActionsInDidSelectRow:(NSIndexPath*)indexPath{ 
    // write code. 
} 

viewDidLoad में हर बार के रूप में

-(void)viewDidLoad{ 

     NSIndexPath *indexPath=[NSIndexPath indexPathForRow:0 inSection:0]; 
     [dateTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionBottom]; 
     [self doActionsInDidSelectRow:indexPath]; 
} 

इस विधि कॉल दूसरी समस्या मेरे सुझाव है के लिए, जब आप एक सेल स्टोर का चयन करते हैं जो एनएसएसटींग में सेल का टेक्स्ट होता है। जब आप डेटा को फिर से लोड करते हैं, cellForRowAtIndexPath के अंदर: केवल पहले से संग्रहीत स्ट्रिंग सामग्री के साथ सेल के टेक्स्ट की तुलना करें। यदि वे

[dateTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionBottom]; 

विधि का उपयोग करके चयन करें। उम्मीद है कि यह आपके मुद्दों को हल करेगा।

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