原來是像UITextField那傢伙啊!長那麼奇怪化成灰我都認得。
UITextView是個可捲動的多行文字區塊,支援自定義樣式也支援編輯。通常會使用text view顯示多行文字,例如純文字文件的一小部分。
attributedText可使text view支援多重格式(但比iOS 6更早的版本不支援),可以藉由設定這個property的值來使用attributed string裡的style。
當然你也可以使用font、textColor、textAlignment等的properties去設定text view,不過設定值會套用到整個text view上。
所以如果想同時在app的單一文字區塊裡顯示plain text與rich text,則非常建議使用UITextView。
與text field相同,當使用者點擊可編輯的text view時,text view會切換為first responder,傳遞訊息給delegate並彈出相對應的鍵盤。
由於鍵盤會遮擋部分的畫面,你需要依情況重整視圖位置。
雖然有些view(例如table view)會自動將first responder捲動到可視位置,但如果first responder在視圖的底部,就算怎麼捲還是會被鍵盤擋住,所以還是需要調整視圖的大小或位置以確保first responder是可見的。
而text view同樣需要收起鍵盤,你可以設計與使用者互動的元件,傳送resignFirstResponder()給first responder,讓他退出first responder的身份來收回鍵盤。
當鍵盤彈出與收回的同時會傳送一些Notification,帶著鍵盤大小等資訊。監控這些keyboard-related notification讓你可以藉此重整視圖大小及位置。
系統為text view提供的notification如下:
而以下是text view發出訊息給delegate並呼叫function的程序:
另外可以使用UITextInputTraits這個protocol裡的方法來自訂鍵盤類型等外觀,或是控制它的輸入行為。
基本上上述的部分與delegate的properties/functions都與text field大同小異,大家可以參考我之前的文章:
Day 11: UITextField三部曲-住海邊的UITextFieldDelegate
去吧!我把text field的精華都藏在那裡了。
text view藉由傳送訊息給delegate,呼叫textView(_:shouldInteractWith:in:interaction:)來決定是否允許使用者在包含文字附件/URL的特定文字範圍內與之產生互動。
允許互動內容為文字附件時,當使用者點擊或長按文字附件而附件內的image為nil時呼叫這個方法,可以藉由此方法觸發動作。
而允許互動內容為URL時,只有在使用者第一次與URL互動時才會呼叫此方法。可以在此方法內定義一個使用者可進行的操作列表,而使用者選取這個列表裡面的方法時,因為已經不算第一次與URL互動,故不會再次呼叫這個function。
因為text view與text field幾乎採用了一模一樣的protocol們,delegate的內容也大同小異,怪不得長得這麼像!
不過還是有不一樣的地方,下回就來說說text view的properties與functions吧!