Mic*_*all 19 iphone cocoa-touch uitextview
我必须在滚动的UITextView中更新少量文本.我只会插入光标当前所在的字符,我只需按一下导航栏上的按钮即可.
我的问题是每当我调用文本视图的setText方法时,它都会跳转到文本的底部.我已经尝试使用contentOffset并重置selectedRange但它不起作用!这是我的例子:
// Remember offset and selection
CGPoint contentOffset = [entryTextView contentOffset];
NSRange selectedRange = [entryTextView selectedRange];
// Update text
entryTextView.text = entryTextView.text;
// Try and reset offset and selection
[entryTextView setContentOffset:contentOffset animated:NO];
[entryTextView setSelectedRange: selectedRange];
Run Code Online (Sandbox Code Playgroud)
有没有办法可以在没有任何滚动动作的情况下更新文本...好像他们只是在键盘上输入了一些东西?
编辑:
我已经尝试使用textViewDidChange:delegate方法,但它仍然没有滚动到原始位置.
- (void)textViewDidChange:(UITextView *)textView {
if (self.programChanged) {
[textView setSelectedRange:self.selectedRange];
[textView setContentOffset:self.contentOffset animated:NO];
self.programChanged = NO;
}
}
- (void)changeButtonPressed:(id)sender {
// Remember position
self.programChanged = YES;
self.contentOffset = [entryTextView contentOffset];
self.selectedRange = [entryTextView selectedRange];
// Update text
entryTextView.text = entryTextView.text;
}
Run Code Online (Sandbox Code Playgroud)
May*_*sse 14
如果您使用iPhone 3.0或更高版本,则可以解决此问题:
textView.scrollEnabled = NO;
//You should know where the cursor will be(if you update your text by appending/inserting/deleting you can know the selected range) so keep it in a NSRange variable.
Then update text:
textView.text = yourText;
textView.scrollEnabled = YES;
textView.selectedRange = range;//you keep before
Run Code Online (Sandbox Code Playgroud)
它现在应该工作(不再跳跃)
关心Meir Assayag
基于Meir的建议,这里的代码以编程方式删除选择(是的,我知道有一个选择菜单按钮也可以,但我做的事情有点时髦)而不滚动文本视图.
NSRange selectedRange = textView.selectedRange;
textView.scrollEnabled = NO;
// I'm deleting text. Replace this line with whatever insertions/changes you want
textView.text = [textView.text
stringByReplacingCharactersInRange:selectedRange withString:@""];
selectedRange.length = 0;
// If you're inserting text, you might want to increment selectedRange.location to be
// after the text you inserted
textView.selectedRange = selectedRange;
textView.scrollEnabled = YES;
Run Code Online (Sandbox Code Playgroud)
此决定适用于iOS 8:
let offset = textView.contentOffset
textView.text = newText
textView.layoutIfNeeded()
textView.setContentOffset(offset, animated: false)
Run Code Online (Sandbox Code Playgroud)
有必要完全调用,setContentOffset:animated:因为只有这将取消动画.textView.contentOffset = offset不会取消动画,也无济于事.
| 归档时间: |
|
| 查看次数: |
12329 次 |
| 最近记录: |