簡體   English   中英

有多行時,“手動”處理UITextView的文本和光標位置會中斷

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM