簡體   English   中英

UITextView 如何在沒有委托的情況下監聽自己的更改

[英]How can a UITextView listen on its own changes without delegate

我正在制作一個自定義 UITextView 子類。 目的是支持占位符,而不是原生支持 UITextView。 文本視圖需要監聽自己的變化,以便顯示/隱藏占位符 label。 但我不能使用委托,因為用戶 class 可能會將委托重置為自身。 在沒有任何委托方法的情況下如何實現這一點?

您不能使用delegate似乎有點奇怪,並且可能值得檢查沒有更好的架構允許它,但如果它不可行,您可以使用通知來提醒您textView中的活動。

TextViews 發出textDidBeginEditingNotificationtextDidChangeNotificationtextDidEndEditingNotification

您可以訂閱這些通知,將文本值與存儲的版本進行比較,並做出相應的響應。

此頁面上的詳細信息: textView 通知的 Apple 文檔

您可以監聽文本值的變化,並對其采取行動。 如果至少有一個字符,那么我們隱藏占位符,如果有 0 個字符,我們取消隱藏占位符。

class CustomTextView: UITextView {

   override var text: String! {
        didSet (newValue) {
            let shouldHide = newValue.count > 0
            placeholder.isHidden = shouldHide
        }
    }
}

但我不能使用委托,因為用戶 class 可能會將委托重置為自身。 在沒有任何委托方法的情況下如何實現這一點?

為什么會這樣做? 您是否將YourTextView.delegate = self放在多個地方? 您是否已經嘗試過委托?

這是代表的代碼:

func textViewDidEndEditing(_ textView: UITextView) {

}

如果您真的不想使用委托,您可以使用一個計時器來非常頻繁地檢查 textview 並將其與您存儲的先前值進行比較。 您還可以檢查鍵盤操作,然后檢查 textview。

let timer = Timer(timeInterval: 0.0, repeats: true) { _ in 
 //put a conditional here that compares the textview text to the previously stored value
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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