TikTok 和 Instagram (iOS) 都有一個內置于其編輯個人資料傳記代碼的機制,該機制使用戶能夠使用回傳鍵并在用戶的個人資料傳記中創建分隔線。但是,在回傳一定數量的行而行中沒有文本后,它們會阻止用戶再次使用回傳鍵。
怎么能做到這一點?
如果游標所在的當前行為空,我了解如何使用以下方法防止使用回傳鍵:
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
guard text.rangeOfCharacter(from: CharacterSet.newlines) == nil else {
return false
}
return true
此外,我需要幫助弄清楚如何檢測,例如,4 行是空的,并說明如果 4 行是空的,則阻止用戶使用回傳鍵。
uj5u.com熱心網友回復:
這可能需要對邊緣情況進行微調,但這肯定是我的起點。這個想法是用當前輸入檢查文本視圖中的最后 4 個輸入并決定如何處理它。這個特殊的代碼會阻止用戶創建第四個連續的空行。
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if text == "\n",
textView.text.hasSuffix("\n\n\n\n") {
return false
}
return true
}
uj5u.com熱心網友回復:
我不完全確定我是否正確理解了您的問題。但讓我試著幫忙。
AUITextView具有text您可以讀取的屬性。然后,如果用戶輸入新字符/插入新文本(確保使用復制粘貼文本進行測驗),您可以檢查文本的最后三個字符是否為換行符。如果是這樣,并且用戶正在嘗試添加另一個換行符,您知道回傳false.
這看起來像這樣:
let lastThreeCharacters = textView.text.suffix(3)
let lastThreeAreNewlines = (lastThreeCharacters.count == 3) && lastThreeCharacters.allSatisfy( {$0.isNewline} ) // Returns true if the last 3 characters are newlines
您需要實施一些額外的檢查。要插入的字符是換行符嗎?如果用戶粘貼文本,最后 4 個字符會是換行符嗎?
另一種方法是使用UITextViewDelegate. 您還可以實作textViewDidChange(_:),它會在用戶更改文本后呼叫。然后,檢查文本是否(以及在哪里)包含四個新行并將它們替換為空字符。
這看起來像這樣(取自這里):
func textViewDidChange(_ textView: UITextView) {
// Avoid new lines also at the beginning
textView.text = textView.text.replacingOccurrences(of: "^\n", with: "", options: .regularExpression)
// Avoids 4 or more new lines after some text
textView.text = textView.text.replacingOccurrences(of: "\n{4,}", with: "\n\n\n", options: .regularExpression)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/390821.html
