[英]“Manually” handling text and cursor position of UITextView breaks when there are multiple lines
我有一个狭窄的UITextView
(大约1行高),我只能以编程方式添加文本,并在单击按钮时设置它的text
属性。 我还手动处理光标位置,随着文本的更改设置selectedRange
。 只要我只有一行文字,所有作品都很棒。
当我有两行或更多行文本并尝试在第一行插入文本时,该文本将正确插入,并且光标位置仍在正确的位置,但是UITextView
滚动到底部。 然后,当我在顶部添加另一条文本时,它将向上滚动到“正确”位置。 然后,该模式针对除最后一行以外的每一行输入的每个文本重复执行此操作,从而使UITextView对于每个按下的按钮都向上和向下滚动。
我还尝试调用UITextView scrollRangeToVisible:
在设置新文本后将selectedRange属性作为参数传递。 那也不起作用。
设置text
后,我最终尝试在0.5 s的延迟后设置selectedRange
。 然后,它将按UITextView
工作,但UITextView
是首先将UITextView
向下滚动到底部持续0.5 s。 这似乎表明UITextView的setText
方法在某种程度上是异步的,并且在我已经设置了selectedRange
或称为scrollRangeToVisible
,并将UITextView重新调整为它认为是所需的。
谁能告诉我怎么回事,以及如何解决这个问题。
谢谢!
UITextField
的自动滚动行为可能很烦人,有时很难利用。
您需要用户手动编辑文本吗? 如果不是,请使用多行UILabel
。
如果是,则还使用多行UILabel
并在用户点击后立即将其与UITextView
交换。 将其更改回didEndEditing
。 在表视图中,这种技术对我来说效果很好。
我解决了问题! 在创建自定义输入视图的迷宫中开始时,我开始实现UITextInput
并且发现UITextInput
协议声明了许多有趣的方法。 令人敬畏的是UITextView
实现了该协议。 因此,即使它不在直接的UITextView
API参考中,也可以在UITextView
上调用所有UITextInput
方法。 例如insertText:
来自UIKeyInput
协议)和replaceRange:withText:
他们使以编程方式使用UITextView
变得更加灵活。 希望这也可以帮助其他人!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.