2011-01-10 48 views
2

我正在爲使用UITextView的iPad開發一個簡單的文本編輯應用程序。我總是有一些UIScrollView和UITextView的問題。我想我只是從這兩件事中預料到太多東西。如何完全禁用UITextView的滾動?

當我將myTextView.text設置爲另一個NSString實例時,滾動會自動發生。我可以防止這種滾動設置

myTextView.scrollEnabled = NO; 
myTextView.text = newText; 
myTextView.scrollEnabled = YES; 

但是,如果我改變myTextView的財產的selectedRange,滾動發生。

具體而言,如果selectedRange的範圍發生在當前屏幕上的文本中,則不會發生滾動。

例如,如果通過點擊「全選」屬性選擇所有文本,則不會發生滾動。但是,如果我通過將selectedRange設置爲NSMakeRange(0,[myTextView.text length])來選擇所有文本,則會發生滾動至END(最後一個插入位置)的情況。

爲了解決這個問題, 1)我保存了myTextView的原始內容偏移量。

CGPoint originalOffset = myTextView.contentOffset; 
// change myTextView.selectedRange here 
myTextView.selectedRange = originalOffset 

但沒有任何結果。

2)我使用NSTimer在幾秒鐘後調用了上面的代碼,並且正確滾動返回到原始位置(偏移)。然而,滾動到第一次發生,然後到頂部..

有沒有辦法來完全防止UITextView的滾動片刻?

回答

9

可以禁用幾乎所有通過添加如下方法到您的UITextView子滾動:

- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated { 
    // do nothing 
} 

我說的原因「幾乎」所有的滾動是,即使上面,它仍然接受用戶滾動。儘管可以通過將self.scrollEnabled設置爲NO來禁用這些功能。

如果您只想禁用某些卷軸,然後製作一個ivar,讓它調用acceptScrolls,以確定是否要允許滾動。然後,您的scrollRectToVisible方法可能如下所示:

- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated { 
    if (self.acceptScrolls) 
    [super scrollRectToVisible: rect animated: animated]; 
} 
+1

非常感謝!我從stackoverflow得到了很多幫助。希望我很快能回答很多問題! – pnmn 2011-01-10 22:54:42