2010-05-08 11 views
65

क्या यह जानने का कोई तरीका है कि कौन सी UITableViewCell स्क्रॉल विंडो के शीर्ष पर है?मैं UITableView स्क्रॉल स्थिति कैसे प्राप्त कर सकता हूं ताकि मैं इसे सहेज सकूं?

मैं वर्तमान स्क्रॉल स्थिति प्राप्त करना चाहता हूं ताकि ऐप निकलने पर मैं इसे सहेज सकूं। जब ऐप शुरू हो जाता है, तो मैं उस स्थिति तक स्क्रॉल करना चाहता हूं जब यह आखिरी बार निकलता था।

उत्तर

146

आप आसानी से contentOffset संपत्ति देखकर तालिका दृश्य के सटीक ऑफसेट को पकड़ सकते हैं। लंबवत स्क्रॉल के लिए, देखें:

tableView.contentOffset.y; 
+1

यह स्क्रॉल व्यू में एक CGPoint है, मुझे यकीन नहीं है कि मैं कैसे बता सकता हूं कि UITableViewCell किससे मेल खाता है। – progrmr

+15

यदि आप ऑफसेट का उपयोग करते हैं तो आपको सेल की आवश्यकता नहीं है; जब आप दृश्य पुनः दर्ज करते हैं तो ऑफसेट सेट करें। हालांकि, अगर आपको शीर्ष पर सेल पता होना चाहिए, तो बस इसका उपयोग करें: [tableView indexPathForRowAtPoint: CGPointMake (0, 0)]; –

+0

सामग्री का उपयोग कर ऑफसेट पूरी तरह से काम करता है, यह स्क्रॉल स्थिति को वापस देता है जहां ऐप आखिरी बार छोड़ दिया गया था। धन्यवाद! मुझे यह जानने की जरूरत नहीं थी कि यह किस सेल के बाद था। सी # उपयोगकर्ता के लिए – progrmr

2

स्वीकृत समाधान केवल तभी काम करता है जब आप सभी तालिका दृश्य वस्तुओं का आकार जानते हों। ऑटो आकार/अनुमानित आकार के साथ जो हमेशा सत्य नहीं होता है।

एक विकल्प पहला दृश्य आइटम सहेजना और उसे स्क्रॉल करना है।

आप के साथ पहली बार दिखाई आइटम indexPath प्राप्त कर सकते हैं:

savedIndex = tableView.indexPathsForVisibleRows?.first 

तो ऐसा करके यह करने के लिए स्क्रॉल:

tableView.scrollToRowAtIndexPath(savedIndex, atScrollPosition: .Top, animated: false) 
1

सुनिश्चित करें कि आप viewWillAppear में लोड कर सकते हैं करें न कि viewDidLoad (परीक्षण किया आईओएस 9) । ViewWillAppear तब होता है जब दृश्य लेआउट समाप्त हो जाता है - परिणाम में अंतर होता है।

-(void) viewWillAppear:(BOOL)animated { 
    NSUserDefaults *lightData = [NSUserDefaults standardUserDefaults]; 
    [self.tableView setContentOffset:CGPointMake(0, [lightData floatForKey:@"yValue"])]; 
} 

-(void) viewWillDisappear:(BOOL)animated { 
    NSUserDefaults *lightData = [NSUserDefaults standardUserDefaults]; 
    [lightData setFloat:self.tableView.contentOffset.y forKey:@"yValue"]; 
    [lightData synchronize]; 
} 
संबंधित मुद्दे

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