Swift基礎(chǔ)之關(guān)于鍵盤的那些事兒

看過小編前面的文章的小伙伴們應(yīng)該已經(jīng)發(fā)現(xiàn)了,在UITextField中期揪,小編簡(jiǎn)單的介紹過一丟丟關(guān)于UIKeyboard的鍵盤類型。在這篇文章中,我們來(lái)詳細(xì)的看一下UIKeyboard的相關(guān)知識(shí)吧苍苞。

一、鍵盤的相關(guān)屬性

1.鍵盤8種類型
  textF.keyboardType = UIKeyboardType.Default  //系統(tǒng)默認(rèn)的虛擬鍵盤
  textF.keyboardType = UIKeyboardType.ASCIICapable  //顯示英文字母的虛擬鍵盤
  textF.keyboardType = UIKeyboardType.NumbersAndPunctuation  //顯示數(shù)字和標(biāo)點(diǎn)的虛擬鍵盤
  textF.keyboardType = UIKeyboardType.URL  //顯示便于輸入數(shù)字的虛擬鍵盤
  textF.keyboardType = UIKeyboardType.NumberPad  //顯示便于輸入數(shù)字的虛擬鍵盤
  textF.keyboardType = UIKeyboardType.PhonePad  //顯示便于撥號(hào)呼叫的虛擬鍵盤
  textF.keyboardType = UIKeyboardType.NamePhonePad  //顯示便于聊天撥號(hào)的虛擬鍵盤
  textF.keyboardType = UIKeyboardType.EmailAddress  //顯示便于輸入Email的虛擬鍵盤
  textF.keyboardType = UIKeyboardType.DecimalPad  //顯示用于輸入數(shù)字和小數(shù)點(diǎn)的虛擬鍵盤
  textF.keyboardType = UIKeyboardType.Twitter  //顯示方便些Twitter的虛擬鍵盤
  textF.keyboardType = UIKeyboardType.WebSearch  //顯示便于在網(wǎng)頁(yè)上書寫的虛擬鍵盤
2.鍵盤的外觀
  textF.keyboardAppearance = .Default //默認(rèn)外觀:淺灰色
  textF.keyboardAppearance = .Dark //黑色
  textF.keyboardAppearance = .Light //亮色狼纬,與Default很相似
3.鍵盤的回車鍵
  textF.returnKeyType = .Default //默認(rèn):灰色按鈕羹呵,標(biāo)有Return
  textF.returnKeyType = .Continue  // 標(biāo)有Continue的藍(lán)色按鈕 
  textF.returnKeyType = .Done //標(biāo)有Done的藍(lán)色按鈕 
  textF.returnKeyType = .EmergencyCall //緊急呼叫按鈕
  textF.returnKeyType = .Go  //標(biāo)有Go的藍(lán)色按鈕 
  textF.returnKeyType = .Google  //標(biāo)有Google的藍(lán)色按鈕,用于搜索
  textF.returnKeyType = .Join //標(biāo)有Join的藍(lán)色按鈕 
  textF.returnKeyType = .Next //標(biāo)有Next的藍(lán)色按鈕  
  textF.returnKeyType = .Route //標(biāo)有Route的藍(lán)色按鈕
  textF.returnKeyType = .Search //標(biāo)有Search的藍(lán)色按鈕
  textF.returnKeyType = .Send //標(biāo)有Send的藍(lán)色按鈕
  textF.returnKeyType = .Yahoo //標(biāo)有Yahoo!的藍(lán)色按鈕疗琉,用于搜索
4.鍵盤的大寫屬性
  textF.autocorrectionType = .Default  //默認(rèn)
  textF.autocorrectionType = .No  //不自動(dòng)更正
  textF.autocorrectionType = .Yes  //自動(dòng)更正
5.安全性

當(dāng)我們想輸入密碼的時(shí)候當(dāng)然需要安全顯示啦冈欢,鍵盤也為我們提供了這樣一個(gè)屬性。

  textF.secureTextEntry = true

二盈简、鍵盤的事件分析

class ViewController: UIViewController,UITextFieldDelegate {

      var textField:UITextField?
     //Mark:life cycle
      override func viewDidLoad() {
         super.viewDidLoad()

         textField = UITextField(frame: CGRectMake(50, 50, 150, 30))
         textField?.backgroundColor = UIColor.cyanColor()
         textField?.textColor = UIColor.blackColor()
         textField?.placeholder = "請(qǐng)輸入用戶名"
         textField?.delegate = self
         view.addSubview(textField!)

      }
      override func viewWillDisappear(animated: Bool) {
         if self.textField != nil {
            let center = NSNotificationCenter.defaultCenter()
            center.removeObserver(self, name: UIKeyboardWillShowNotification, object: nil)
            center.removeObserver(self, name: UIKeyboardWillHideNotification, object: nil)
         }
      }
      //Mark:Delegate
      func textFieldDidBeginEditing(textField: UITextField) {
         //監(jiān)聽鍵盤彈出通知
         NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.keyboardWillShow(_:)), name: UIKeyboardWillShowNotification, object: nil)
         //監(jiān)聽鍵盤收回通知
         NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.keyboardWillHide(_:)), name: UIKeyboardWillHideNotification, object: nil)
      }
      func textFieldDidEndEditing(textField: UITextField) {
         self.view.endEditing(true)
     }
     //鍵盤顯示
      func keyboardWillShow(notification:NSNotification) {
         let textMaxY = CGRectGetMaxY(self.textField!.frame)
         let keyboardH : CGFloat = (notification.userInfo![UIKeyboardFrameEndUserInfoKey]?.CGRectValue.size.height)!
         let keyboardY : CGFloat = self.view.frame.size.height - keyboardH
         var duration  = notification.userInfo![UIKeyboardAnimationDurationUserInfoKey]?.doubleValue
         if duration < 0.0 {
              duration = 0.25
         }
         UIView.animateWithDuration(duration!) { () -> Void in
             if (textMaxY > keyboardY) {
                 self.view.transform = CGAffineTransformMakeTranslation(0, keyboardY - textMaxY - 10)
             }else{
                 self.view.transform = CGAffineTransformIdentity
             }
          }

       }
      //鍵盤隱藏
      func keyboardWillHide(notification:NSNotification){
         let duration  = notification.userInfo![UIKeyboardAnimationDurationUserInfoKey]?.doubleValue
         UIView.animateWithDuration(duration!) { () -> Void in
             self.view.transform = CGAffineTransformIdentity
         }
       }
 } 
實(shí)現(xiàn)方法二:
  func keyboardWillShow(note: NSNotification) {
    let userInfo = note.userInfo!
    let  keyBoardBounds = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
    let duration = (userInfo[UIKeyboardAnimationDurationUserInfoKey] as! NSNumber).doubleValue
    
    let deltaY = keyBoardBounds.size.height - 200
    let animations:(() -> Void) = {
        if deviceTypeIphone5() {
            //鍵盤的偏移量
            self.textView.transform = CGAffineTransform(translationX: 0 , y: -deltaY)
        }
    }
    
    if duration > 0 {
        let options = UIViewAnimationOptions(rawValue: UInt((userInfo[UIKeyboardAnimationCurveUserInfoKey] as! NSNumber).intValue << 16))
        
        UIView.animate(withDuration: duration, delay: 0, options:options, animations: animations, completion: nil)
        
    }else{
        animations()
    }
}


func keyboardWillHidden(note: NSNotification) {
    self.textView.transform = CGAffineTransform(translationX: 0 , y: 0)
}
在這里對(duì)代碼進(jìn)行簡(jiǎn)單的解釋:

我們都知道凑耻,當(dāng)焦點(diǎn)到可輸入的控件上(一般指UITextField)時(shí),鍵盤會(huì)自動(dòng)顯示柠贤,并且觸發(fā)UIKeyboardWillShowNotification通知香浩;當(dāng)焦點(diǎn)離開可輸入的控件時(shí),鍵盤會(huì)自動(dòng)隱藏臼勉,并且觸發(fā)UIKeyboardWillHideNotification通知邻吭。所以,要注冊(cè)這兩種通知事件坚俗。
關(guān)于notification.userInfo的作用就是返回許多有用的參數(shù)镜盯,在這里我用的是UIKeyboardAnimationDurationUserInfoKey,查看內(nèi)部我們可以發(fā)現(xiàn) UIKeyboardAnimationDurationUserInfoKey = "0.25";

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末猖败,一起剝皮案震驚了整個(gè)濱河市速缆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌恩闻,老刑警劉巖艺糜,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異幢尚,居然都是意外死亡破停,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門尉剩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)真慢,“玉大人,你說我怎么就攤上這事理茎『诮纾” “怎么了管嬉?”我有些...
    開封第一講書人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)朗鸠。 經(jīng)常有香客問我蚯撩,道長(zhǎng),這世上最難降的妖魔是什么烛占? 我笑而不...
    開封第一講書人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任胎挎,我火速辦了婚禮,結(jié)果婚禮上忆家,老公的妹妹穿的比我還像新娘犹菇。我一直安慰自己,他們只是感情好弦赖,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開白布项栏。 她就那樣靜靜地躺著浦辨,像睡著了一般蹬竖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上流酬,一...
    開封第一講書人閱讀 52,713評(píng)論 1 312
  • 那天币厕,我揣著相機(jī)與錄音,去河邊找鬼芽腾。 笑死旦装,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的摊滔。 我是一名探鬼主播阴绢,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼艰躺!你這毒婦竟也來(lái)了呻袭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤腺兴,失蹤者是張志新(化名)和其女友劉穎左电,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體页响,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡篓足,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了闰蚕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片栈拖。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖没陡,靈堂內(nèi)的尸體忽然破棺而出涩哟,到底是詐尸還是另有隱情烟瞧,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布染簇,位于F島的核電站参滴,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏锻弓。R本人自食惡果不足惜砾赔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望青灼。 院中可真熱鬧暴心,春花似錦、人聲如沸杂拨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)弹沽。三九已至檀夹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間策橘,已是汗流浹背炸渡。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留丽已,地道東北人蚌堵。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像沛婴,于是被迫代替她去往敵國(guó)和親吼畏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容