[英]“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.