textview - 开始编辑时将光标放在文本末尾
Posted
技术标签:
【中文标题】textview - 开始编辑时将光标放在文本末尾【英文标题】:textview - put cursor at end of text when start editing 【发布时间】:2013-12-04 20:21:54 【问题描述】:我正在编辑 UITextView 中的文本。当该字段打开进行编辑时,我需要将光标定位在现有文本的最后一个字符之后。我看到的行为是光标或多或少位于我触摸 UITextView 以开始编辑的点下方——也许在我触摸的单词的末尾。我尝试在 textViewDidBeginEditing: 和 textViewShouldBeginEditing: 中设置 textview.selectedRange ,但这根本没有效果。我尝试选择现有文本的范围,例如 1,2,但这也没有做任何事情。看起来 selectedRange 或多或少是一个只读值?
- (void) textViewDidBeginEditing:(UITextView *)textView
// Position the insertion cursor at the end of any existing text
NSRange insertionPoint = NSMakeRange([textView.text length], 0);
textView.selectedRange = insertionPoint;
如何将光标移到文本末尾?
【问题讨论】:
看看答案就在这里:***.com/questions/10135086/… 感谢 artud2000。对我有用的答案是在 UITextView 和点击处理程序中放置一个 UITapGestureRecognizer 以将文本视图设置为第一响应者。在这种情况下,光标的“自然”位置是在现有文本的末尾。 是的,有时需要编写代码来触发或检测 UIControl 元素通常行为之上的事件。 【参考方案1】:artud2000 的评论引用的帖子包含一个有效的答案。在这里总结一下,添加:
编辑:原来的答案是不够的。我添加了切换似乎足够的可编辑属性。问题是点击手势仅一次(最多)进入处理程序,随后在 UITextField 上的点击直接开始编辑。如果它不可编辑,则 UITextView 的手势识别器不活动,我放置的那个将起作用。这可能不是一个好的解决方案,但似乎确实有效。
- (void)viewDidLoad
...
tapDescription = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(tapDescription:)];
[self.descriptionTextView addGestureRecognizer:tapDescription];
self.descriptionTextView.editable = NO; // if not set in storyboard
- (void) tapDescription:(UIGestureRecognizer *)gr
self.descriptionTextView.editable = YES;
[self.descriptionTextView becomeFirstResponder];
- (void) textViewDidEndEditing:(UITextView *)textView
//whatever else you need to do
textView.editable = NO;
光标的默认位置似乎在解决我的问题的任何现有文本之后,但如果您愿意,可以通过设置 selectedRange 来选择 textViewDidBeginEditing: 中的文本——例如:
- (void) textViewDidBeginEditing:(UITextView *)textView
// Example: to select the second and third characters when editing starts...
NSRange insertionPoint = NSMakeRange(1, 2);
textView.selectedRange = insertionPoint;
【讨论】:
【参考方案2】:感谢查理普莱斯的回答。我用它来解决我在 UITextView 上的类似问题。这是 Swift 中的答案,以防万一有人需要:
...
let tapDescription = UITapGestureRecognizer(target: self, action: #selector(MyViewController.tapDescription(_:)))
self.descriptionTextView.addGestureRecognizer(tapDescription)
self.descriptionTextView.editable = false
...
func tapDescription(gr: UIGestureRecognizer)
self.descriptionTextView.editable = true
self.descriptionTextView.becomeFirstResponder()
func textViewDidEndEditing(textView: UITextView)
self.descriptionTextView.editable = false
【讨论】:
以上是关于textview - 开始编辑时将光标放在文本末尾的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在编辑时将 TextField 的光标移动到文本的末尾?- SwiftUI