2009-08-27 16 views
10

मैं टेक्स्टव्यू को वापस मूल स्थिति में सेट करने के लिए UITextView के कुछ प्रकार का रीफ्रेश करना चाहता हूं। मेरे पास एक अनुच्छेद है जो गतिशील रूप से आबादी प्राप्त करता है इस पर निर्भर करता है कि उपयोगकर्ता किस तालिका दृश्य को क्लिक करता है। तो जब वे टेक्स्ट फ़ील्ड को स्क्रॉल करते हैं, तो वापस जाएं और एक और सेल का चयन करें और वापस लौटें, टेक्स्ट बदलता है, लेकिन स्क्रॉल स्थिति तब भी बनी हुई है जब उपयोगकर्ता इसे छोड़ देता है। मैं इसे अपनी डिफ़ॉल्ट स्थिति में कैसे वापस कर सकता हूं। धन्यवाद!आईफोन पर UITextView की स्क्रॉल स्थिति रीफ्रेश करें

+0

एक नोट के रूप में, मैं उपयोग करने का प्रयास किया गया है [myTextView scrollRangeToVisible: NSMakeRange ([myTextView.text लंबाई], 0)]; –

उत्तर

27

डिफ़ॉल्ट स्थिति से, क्या आपका मतलब शीर्ष पर स्क्रॉल किया गया है? यदि ऐसा है, तो आप सही रास्ते पर हैं। प्रयास करें

[myTextView scrollRangeToVisible:NSMakeRange(0, 0)]; 
+1

मैंने कोशिश भी की, लेकिन यह पाठ के असली शीर्ष पर नहीं प्रतीत होता। यह केवल शीर्ष के करीब है, लेकिन डिफ़ॉल्ट की तरह दिखता नहीं है। ईमानदारी से मुझे वास्तव में NSRange सामान की अच्छी समझ नहीं है। –

+0

मैंने अभी यह ऐप के साथ कोशिश की है, और यह मेरे लिए काम करता है। क्या आप अपने सिम्युलेटर का स्क्रीनशॉट पोस्ट कर सकते हैं ताकि हम व्यवहार देख सकें? –

+0

यहां कुछ स्क्रीनकैप्स हैं: प्रारंभिक, मैन्युअल रूप से नीचे स्क्रॉल किया गया, और http://www.angelfilm.net/external/stackoverflow/mos/ –

8

मैं, स्वचालित रूप से पाया है कि अगर मैं UITextView पहले और उसके बाद स्पष्ट नया पाठ लागू यह होगा वापस ऊपर "scroll"।

myTextView.text = @""; 
myTextView.text = theRealTextContent; 
1

इनमें से कोई भी दृष्टिकोण मेरे लिए संतोषजनक ढंग से काम नहीं करता है।

  • scrollRangeToVisible दृश्य कलाकृतियों के टन (जब बड़े तार के बीच स्विच स्क्रॉल के बहुत सारे) पैदा करता है, और वास्तव में केवल सब एक देरी कॉल सामग्री के कुछ समय बाद (मैं 0.1 सेकंड प्रयुक्त) बदल दिया गया है में कम से काम करता है, शगी मेंढक के जवाब के रूप में सीधे नहीं है।

  • नई सामग्री को सेट करने से पहले पाठ को @ "" सेट करने से पहले देरी के साथ मदद नहीं मिली।

ऐसा लगता है के रूप में अगर एक बार एक UITextView में लिखा गया है, यह हमेशा के इस मोड जहां नई सामग्री की स्थापना कष्टप्रद स्क्रॉल कलाकृतियों का कारण बनता है में है। मैंने UITextView की शुरुआत में चयन श्रेणी को सेट करने का प्रयास किया, लेकिन इससे मदद नहीं मिली। इस्तीफा भेजना नई सामग्री को सेट करने से पहले फर्स्ट रेस्पॉन्डर संदेश, या तो मदद नहीं करता था।

इस वजह से, मैंने सामग्री को बदलने पर प्रत्येक बार UITextView को हटाने और फिर से बनाने का निर्णय लिया। यह मेरे ऐप में एक दुर्लभ पर्याप्त घटना (मानव संपर्क के आधार पर) है कि यह एक प्रदर्शन समस्या नहीं है। UITextView में कष्टप्रद स्क्रॉलिंग कलाकृतियों के बिना मुझे "नई सामग्री लोड करने" का एकमात्र तरीका मिल सकता था।

मेरा अनुभव OS3.2 (ipad सिम्युलेटर) के साथ है

5
[textview setScrollEnabled:YES]; 
textview.text = yourText; 
[textview setScrollEnabled:NO]; 
+0

का उल्लेख किया है, मैं वास्तव में सामग्री को अपडेट करते समय स्क्रॉलिंग से टेक्स्ट व्यू को रोकना चाहता था , इसलिए मैंने इसे दूसरी तरफ किया और यह बेकार ढंग से काम करता है। धन्यवाद। – soemarko

1

मैं वांछित परिणाम पाने में कामयाब रहे - जब समाप्त हो जाती है संपादन अपनी सामग्री के शीर्ष करने के लिए 'पुस्तक' के लिए UITextView मजबूर। लेकिन इसे प्राप्त करने के लिए मुझे टेक्स्ट ViewDidEndEditing में स्क्रॉलिंग को अक्षम करना था और उसी विधि में पाठ को रीसेट करना भी था।

मैं textViewDidBeginEditing में स्क्रॉलिंग को फिर से सक्षम करता हूं।

- (void) textViewDidEndEditing: textView; 
{ 
    [textView setScrollEnabled: NO]; 
    NSString* savedText = [textView text]; 
    [textView setText:@""]; 
    [textView setText: savedText]; 
} 
6

यह काम करता है अगर आप इसे ऊपर तक स्क्रॉल करना चाहते हैं:

[theTextView scrollRangeToVisible:NSMakeRange(0, 0)]; 

केवल समस्या यह है कि यह अपने तरह से ऊपर एनिमेट है। आप इसे शीर्ष स्नैप करना चाहते हैं, तो इस का उपयोग करें:

[theTextView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO]; 
+0

यह समाधान मेरे लिए काम किया। मैंनेडिडलोड में टेक्स्ट लोड किया, UITextView की ContentInset को बदल दिया और फिर शीर्ष पर संरेखित करने के लिए शीर्ष प्राप्त करने के लिए scrollRectToVisible का उपयोग करना पड़ा। धन्यवाद – TMilligan

0

क्या अंत में मेरे लिए काम किया क्या पाठ सामग्री स्पष्ट और फिर अगले रन पाश पर वांछित पाठ के साथ यह निर्धारित करने के लिए।

// clear the text view 
self.textView.text = "" 

// set the text on the next run loop 
dispatch_async(dispatch_get_main_queue()) { 
    self.textView.text = someText 
} 
संबंधित मुद्दे