2010-09-07 11 views
6

स्थिति को स्क्रॉल करने के लिए नीचे दिए गए कोड का उपयोग करके, मैंने एक प्लेस्ट से पाठ को टेक्स्टव्यू में रखा है। टेक्स्ट व्यू अभी तक संवाददाता नहीं है; पाठ प्रारंभ में केवल पढ़ने के लिए है। आईओएस 4 में goToEndOfNote कोड पाठ के अंत में कर्सर को स्थिति देता है और उस स्थिति तक स्क्रॉल करता है। 3.1.3 में जब तक स्क्रीन स्पर्श नहीं होती है तब तक यह अंत तक स्क्रॉल नहीं करता है (जब तक कि कोई परिवर्तन या अतिरिक्त आवश्यकता न हो) तब तक आवश्यक नहीं है, जिससे टेक्स्ट व्यू पहले संवाददाता बन जाए। मैं इसे 3.1.3 में काम करना चाहता हूं क्योंकि यह 4.0 में करता है। कृपया कोई विचार धन्यवाद।स्थिति कर्सर को uitextview में टेक्स्ट के अंत तक और

... 
    self.temp = [[[NSMutableArray alloc] initWithContentsOfFile:myPlistPath] autorelease]; 
    self.textView.text = [self.temp objectAtIndex:0]; 
    [self goToEndOfNote]; 
    //[self performSelector:@selector(goToEndOfNote) withObject:nil afterDelay:0.1]; 
} 

- (void) goToEndOfNote { 
    NSUInteger length = self.textView.text.length; 
    self.textView.selectedRange = NSMakeRange(length, 0); 
} 

उत्तर

3

मैं setContentOffset:animated का उपयोग अपने एप्लिकेशन में से एक में एक UITextView के शीर्ष करने के लिए स्क्रॉल करने के लिए। नीचे भी स्क्रॉल करने के लिए काम करना चाहिए। प्रयास करें:

- (void) goToEndOfNote { 
    NSUInteger length = self.textView.text.length; 
    self.textView.selectedRange = NSMakeRange(length, 0); 
    [textView setContentOffset:CGPointMake(0, length) animated:YES]; 
} 

तुम भी है कि लपेट सकता है तो यह केवल 3.1.3 और नीचे से होता है:

- (void) goToEndOfNote { 
    NSUInteger length = self.textView.text.length; 
    self.textView.selectedRange = NSMakeRange(length, 0); 
    NSString* systemVersion = [[UIDevice currentDevice] systemVersion]; 
    float version = [systemVersion floatValue]; 
    if (version < 3.2) { 
     [textView setContentOffset:CGPointMake(0, length) animated:YES]; 
    } 
} 
+0

लगभग लेकिन काफी नहीं है। टेक्स्टव्यू स्क्रीन का अधिकांश हिस्सा है। 4.0 में ऐड लाइन [textView setContentOffset: CGPointMake (0, लंबाई) एनिमेटेड: हाँ]; आखिरी वर्ण टेक्स्टव्यू (अच्छा) के नीचे स्क्रॉल करने का कारण बनता है। 3.1.3 में, यह अंतिम चरित्र स्क्रीन पर मध्य-मार्ग तक स्क्रॉल करने का कारण बनता है (ठीक है) लेकिन दोनों ओएस संस्करणों में, यदि स्क्रीन पर केवल 1 या 2 लाइनें हैं, तो वे स्क्रीन से स्क्रॉल हो जाते हैं (ऐसा नहीं अच्छा)। मैं स्क्रीनफुल मौजूद होने के बाद ही शुरू करने के लिए स्क्रॉल करना पसंद करूंगा (क्योंकि यह मेरी विधि में केवल 2 मूल पंक्तियों के साथ 4.0 में है)। –

2

सुनिश्चित नहीं हैं कि अगर यह जवाब है, लेकिन यह काम करता है।

3.1.3 में, मूल कोड के साथ, कर्सर अंत में था लेकिन स्क्रॉल शीर्ष पर था। 4.0 में, दोनों नीचे थे।

NSUInteger length = self.textView.text.length; 
self.textView.selectedRange = NSMakeRange(length, 0); 

मैं तो देखा कि 3.1.3 में, 0 और लंबाई स्विचिंग, स्क्रॉल नीचे स्थित था, लेकिन कर्सर शीर्ष पर था।

NSUInteger length = self.textView.text.length; 
self.textView.selectedRange = NSMakeRange(0, length); 

दोनों को एक साथ काम करना। यह नीचे NSMakeRange (0, लंबाई) संभवतः श्रृंखला के अंत करने के लिए करने के लिए स्क्रॉल, तो NSMakeRange (लंबाई, 0) कर्सर वहाँ, सभी कोई परिवर्तन नहीं होता क्या यह 4,0

NSUInteger length = self.textView.text.length; 
self.textView.selectedRange = NSMakeRange(0, length); 
self.textView.selectedRange = NSMakeRange(length, 0); 
1

आप में करता है करने के लिए कहते हैं कर्सर को टेक्स्ट के अंत में लाने के लिए (स्थान = TEXT_VIEW_STRING_LENGTH, लंबाई = 0) रेंज सेट करने के लिए [UITextView -setSelectedRange:] का उपयोग कर सकते हैं, और उसके बाद कर्सर को दृश्यमान स्क्रॉल करने के लिए उसी श्रेणी के साथ [UITextView -scrollRangeToVisible:] पर कॉल करें।

1

देर हो चुकी है लेकिन मुझे इसके लिए समाधान समाधान मिला। इसे थोड़ा हैक

- (void) textViewDidBeginEditing:(UITextView*)textview 
{ 
    [self performSelector:@selector(placeCursorAtEnd:) withObject:textview afterDelay:0.01]; 
} 

- (void)placeCursorAtEnd:(UITextView *)textview 
{ 
    NSUInteger length = textview.text.length; 

    textview.selectedRange = NSMakeRange(length, 0); 

    [textView setContentOffset:CGPointMake(0, length) animated:YES]; 
} 
+0

जब आप 'dispatch_after()' का उपयोग करते हैं तो बहुत अधिक क्लीनर क्योंकि यह एक विधि बचाता है और ट्रिगर और क्रिया को एक साथ रखता है। –

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