iOS系列 基礎篇 08 文本與鍵盤,ios基礎篇
iOS系列 基礎篇 08 文本與鍵盤
目錄:
1. 扯扯犢子
2. TextField
3. TextView
4. 鍵盤的開啟和關閉
5. 開啟/關閉鍵盤的通知
6. 鍵盤的種類
7. 最後再扯兩句
1. 扯扯犢子
與Label一樣,TextField和TextView也是文本類控制項,是可以編輯常值內容的。
在控制項內容編輯方面,三者都可以通過代碼、雙擊該控制項和屬性偵測器中的Text屬性來實現,但是TextField和TextView比Label多了一個鍵盤的使用。
另外,TextField和TextView還各有一個委託協議。
因此,我們把TextField和TextView與之前的Label分開介紹。
下面,我們通過的一個案例,和大家展示TextField和TextView控制項的用法:
1 import UIKit 2 3 class ViewController: UIViewController,UITextFieldDelegate, UITextViewDelegate { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 } 8 9 override func didReceiveMemoryWarning() {10 super.didReceiveMemoryWarning()11 }12 13 }
我們還需要將委派物件ViewController分配給TextView和TextField控制項的委託屬性delegate,這可以通過代碼或者Interface Builder設計器來實現。
這裡,我們用設計器進行分配,具體實現過程如下:
在設計器中開啟storyboard故事板檔案,右擊TextField控制項,彈出的捷徑功能表如。
用滑鼠拖拽Outlet-delegate後面的小圓圈到左面的View Controller上:
響應者鏈從第一個響應者傳到下一個響應者,如果其中一個響應者沒有對事件做出響應,那麼該事件會重新向下傳遞。
顧名思義,“第一響應者”是響應者鏈中的第一個餓,不同的控制項成為“第一響應者”之後的“表現”不太一樣。
TextField和TextView等輸入類型的控制項會出現鍵盤,而我們只有讓這些控制項放棄他們的“第一響應者”身份,鍵盤才會關閉。
要想放棄“第一響應者”身份,需要調用UIResponder類中的resignFirstResponder方法。
此方法一般在點擊鍵盤右下角的return鍵或者是背景視圖時觸發,本案例採用點擊return鍵關閉鍵盤的方式。
要實現這個操作,可以利用TextField和TextView的委託協議實現。
相關的實現代碼是在ViewController檔案中,如下:
1 import UIKit 2 3 class ViewController: UIViewController,UITextFieldDelegate, UITextViewDelegate { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 } 8 9 override func didReceiveMemoryWarning() {10 super.didReceiveMemoryWarning()11 }12 13 // 通過委託實現放棄第一響應者14 // UITextField委託方法15 func textFieldShouldReturn(textField: UITextField) -> Bool {16 textField.resignFirstResponder()17 return true18 }19 20 // 通過委託實現放棄第一響應者21 // UITextView委託方法22 func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {23 if text=="\n" {24 textView.resignFirstResponder()25 return false26 }27 return true28 }29 30 }
在上述代碼中,textFieldShouldReturn: 方法是UITextFieldDelegate委託協議中定義的方法,在使用者點擊鍵盤時調用。
其中,第16行代碼為放棄第一響應者,從而關閉鍵盤。
與此類推,textView:shouldChangeTextInRange:replacementText: 方法是由UITextViewDelegate委託協議提供的方法,它也是在使用者點擊鍵盤時被調用。
另外,如果介面中有很多控制項,活著控制項的位置比較靠近螢幕下方,控制項就很可能會被彈出的鍵盤擋住的。
此時,可以添加UIScrollView控制項來解決,這個咱們後面的文章再說。
最終效果如下:
1 override func viewWillAppear(animated: Bool) { 2 super.viewWillAppear(animated) 3 4 // 註冊鍵盤出現通知 5 NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardDidShow", name: UIKeyboardDidShowNotification, object: nil) 6 7 // 註冊鍵盤隱藏通知 8 NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardDidHide", name: UIKeyboardDidShowNotification, object: nil) 9 }10 11 override func viewWillDisappear(animated: Bool) {12 super.viewWillDisappear(animated)13 14 // 解除鍵盤出現通知15 NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardDidShowNotification, object: nil)16 17 // 解除鍵盤隱藏通知18 NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardDidShowNotification, object: nil)19 }20 21 func keyboardDidShow(notification: NSNotification){22 NSLog("鍵盤開啟")23 }24 25 func keyboardDidHide(notification: NSNotification){26 NSLog("鍵盤關閉")27 }
註冊通知在viewWillAppear: 方法中執行,解除通知在viewWillDisppear: 方法中進行。
keyboardDidShow: 訊息時在鍵盤開啟時發出的,keyboardDidHide: 訊息時在鍵盤關閉時發出的。
6. 鍵盤的種類
我們之前所看到的鍵盤都是系統預設的類型。
在iOS中,開啟有輸入動作的控制項的屬性偵測器,可以發現Keyboard Type的下拉框中選項有11個,表示11中類型的鍵盤,,我們可以根據需要進行選擇:
7. 最後再扯兩句
東西不多,大家多練練就好。
學會舉一反三,自己多想幾個例子做做試試。那幾個鍵盤都開啟看看長啥樣。
最後,祝大家學習快樂。哈哈。