Swift基础之关于键盘的那些事儿

看过小编前面的文章的小伙伴们应该已经发现了,在UITextField中,小编简单的介绍过一丢丢关于UIKeyboard的键盘类型。在这篇文章中,我们来详细的看一下UIKeyboard的相关知识吧。

一、键盘的相关属性

1.键盘8种类型
  textF.keyboardType = UIKeyboardType.Default  //系统默认的虚拟键盘
  textF.keyboardType = UIKeyboardType.ASCIICapable  //显示英文字母的虚拟键盘
  textF.keyboardType = UIKeyboardType.NumbersAndPunctuation  //显示数字和标点的虚拟键盘
  textF.keyboardType = UIKeyboardType.URL  //显示便于输入数字的虚拟键盘
  textF.keyboardType = UIKeyboardType.NumberPad  //显示便于输入数字的虚拟键盘
  textF.keyboardType = UIKeyboardType.PhonePad  //显示便于拨号呼叫的虚拟键盘
  textF.keyboardType = UIKeyboardType.NamePhonePad  //显示便于聊天拨号的虚拟键盘
  textF.keyboardType = UIKeyboardType.EmailAddress  //显示便于输入Email的虚拟键盘
  textF.keyboardType = UIKeyboardType.DecimalPad  //显示用于输入数字和小数点的虚拟键盘
  textF.keyboardType = UIKeyboardType.Twitter  //显示方便些Twitter的虚拟键盘
  textF.keyboardType = UIKeyboardType.WebSearch  //显示便于在网页上书写的虚拟键盘
2.键盘的外观
  textF.keyboardAppearance = .Default //默认外观:浅灰色
  textF.keyboardAppearance = .Dark //黑色
  textF.keyboardAppearance = .Light //亮色,与Default很相似
3.键盘的回车键
  textF.returnKeyType = .Default //默认:灰色按钮,标有Return
  textF.returnKeyType = .Continue  // 标有Continue的蓝色按钮 
  textF.returnKeyType = .Done //标有Done的蓝色按钮 
  textF.returnKeyType = .EmergencyCall //紧急呼叫按钮
  textF.returnKeyType = .Go  //标有Go的蓝色按钮 
  textF.returnKeyType = .Google  //标有Google的蓝色按钮,用于搜索
  textF.returnKeyType = .Join //标有Join的蓝色按钮 
  textF.returnKeyType = .Next //标有Next的蓝色按钮  
  textF.returnKeyType = .Route //标有Route的蓝色按钮
  textF.returnKeyType = .Search //标有Search的蓝色按钮
  textF.returnKeyType = .Send //标有Send的蓝色按钮
  textF.returnKeyType = .Yahoo //标有Yahoo!的蓝色按钮,用于搜索
4.键盘的大写属性
  textF.autocorrectionType = .Default  //默认
  textF.autocorrectionType = .No  //不自动更正
  textF.autocorrectionType = .Yes  //自动更正
5.安全性

当我们想输入密码的时候当然需要安全显示啦,键盘也为我们提供了这样一个属性。

  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 = "请输入用户名"
         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) {
         //监听键盘弹出通知
         NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.keyboardWillShow(_:)), name: UIKeyboardWillShowNotification, object: nil)
         //监听键盘收回通知
         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
         }
       }
 } 
实现方法二:
  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)
}
在这里对代码进行简单的解释:

我们都知道,当焦点到可输入的控件上(一般指UITextField)时,键盘会自动显示,并且触发UIKeyboardWillShowNotification通知;当焦点离开可输入的控件时,键盘会自动隐藏,并且触发UIKeyboardWillHideNotification通知。所以,要注册这两种通知事件。
关于notification.userInfo的作用就是返回许多有用的参数,在这里我用的是UIKeyboardAnimationDurationUserInfoKey,查看内部我们可以发现 UIKeyboardAnimationDurationUserInfoKey = "0.25";

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容