我有一个狭窄的UITextView
(大约1行)我只能以编程方式添加文本,在单击按钮时设置它的text
属性。我还手动处理光标位置,在文本更改时设置selectedRange
。只要我只有一行文字,一切都很好。
如果我有两行或多行文本并尝试在第一行插入文本,则正确插入文本并且光标位置仍然在正确的位置,但UITextView
滚动到底部。当我在顶部添加另一段文本时,它会向上滚动到“正确”位置。然后,对于每个输入的文本,在除最后一行之外的行重复此模式,使UITextView按下每个按钮上下滚动。
我还尝试在设置新文本后调用UITextView scrollRangeToVisible:
将selectedRange属性作为参数传递。这也不起作用。
在设置selectedRange
后,我终于在0.5秒延迟后尝试设置text
。然后它可以正常工作,但只有在UITextView
首次向下滚动到底部0.5秒之后。这似乎表明UITextView的setText
方法在某种程度上是异步的,并且在我已经设置selectedRange
或调用scrollRangeToVisible
之后完成,并将UITextView重新调整为它认为的是期望的。
任何人都可以告诉我发生了什么,以及我如何解决问题。
谢谢!
答案 0 :(得分:0)
UITextField
的自动滚动行为可能很烦人,有时难以利用。
您是否需要用户手动编辑文本?如果不是,请使用多行UILabel
。
如果是,请使用多行UILabel
并在用户点击后立即与UITextView
进行交换。将其更改回didEndEditing
。这种技术在表格视图中对我有用。
答案 1 :(得分:0)
我解决了这个问题!
在创建自定义输入视图的迷宫中开始时,我开始实现UITextInput
,我发现UITextInput
协议声明了许多有趣的方法。令人敬畏的是UITextView
实现了该协议。因此,即使它不在即时UITextView
API引用中,您也可以调用UITextInput
上的所有UITextView
方法。例如insertText:
(来自UIKeyInput
协议)和replaceRange:withText:
。他们使用UITextView
以编程方式工作变得更加灵活。希望这也可以帮助其他人!