Swift实现监听键盘通知及一些处理详解

前言

相信研究swift语言的开发者都多多少少了解或者精通Objective—C语言,熟练掌握Objective—C语言的开发者,在学习swift语言的过程中,是比较快速,而又轻松的。本文主要介绍的是关于Swift监听键盘通知及一些处理的相关资料,之前也做过类似的功能,但是在Swift上面的效果不是很好。今天整理了一下之前小项目中的代码和思路,很好的解决了在登录界面登录按钮被键盘遮挡的问题。

先看效果图

如下

注册键盘通知

//MARK:监听键盘通知
 func registerNotification(){
  NotificationCenter.default.addObserver(self,            selector: #selector(keyBoardWillShow(_ :)),
            name: NSNotification.Name.UIKeyboardWillShow,            object: nil)

  NotificationCenter.default.addObserver(self,            selector: #selector(keyBoardWillHide(_ :)),
            name: NSNotification.Name.UIKeyboardWillHide,            object: nil)
 }

根据键盘通知做出对应的操作

 //MARK:键盘通知相关操作
 @objc func keyBoardWillShow(_ notification:Notification){

  DispatchQueue.main.async {
   /*
    每次键盘发生变化之前,先恢复原来的状态
    y 是键盘布局的origin.y
    y2 是登录按钮的origin.y+height
    如果y>y2,登录按钮没有被遮挡,不需要向上移动;反之,按钮被遮挡,整体需要向上移动一部分
    */
   self.view.center = CGPoint.init(x: Width/2, y: Height/2)
   let user_info = notification.userInfo
   let keyboardRect = (user_info?[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
   let y = keyboardRect.origin.y
   let y2 = (self.nextStep?.frame.origin.y)! + (self.nextStep?.frame.size.height)! + 5
   let offset_y = y2 > y ? (y2-y):(0)
   UIView.animate(withDuration: 0.25, animations: {
    self.view.center = CGPoint.init(x: Width/2, y: self.view.center.y - offset_y)
   })
  }
 }

 @objc func keyBoardWillHide(_ notification:Notification){
  DispatchQueue.main.async {
   self.view.center = CGPoint.init(x: Width/2, y: Height/2)
  }
 }

释放键盘通知

因为这里只有这两个通知,所以我选择了removeObserver(self)来移除所有通知,当然,你也可以根据通知名称来逐个移除。

//MARK:释放键盘监听通知
 func releaseNotification(){
  NotificationCenter.default.removeObserver(self)
 }

经测试,上面的方法在4.0-5.5英寸的iPhone设备上正常运行。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

您可能感兴趣的文章:

  • iOS开发中Swift3 监听UITextView文字改变的方法(三种方法)
  • swift3.0键盘弹起遮挡输入框问题的解决方案
  • Swift让输入框跟随键盘弹起避免输入输入法挡住输入框问题
  • Swift 3.1聊天界面键盘效果的实现详解
(0)

相关推荐

  • iOS开发中Swift3 监听UITextView文字改变的方法(三种方法)

    在项目中使用文本输入框出UITextField之外还会经常使用 UITextView ,难免会有需求监听UITextView文本框内文本数量.下面介绍在swift3中两种常用方式 方式一: 全局通知 1.注册通知 在合适位置注册监听UITextView文本变化的全局通知 //UITextView 监听开始输入的两种方法 //方法一:通知 NotificationCenter.default.addObserver(self, selector: #selector(ComposeVC.textV

  • swift3.0键盘弹起遮挡输入框问题的解决方案

    下面一段代码是小编给大家介绍的swift3.0键盘弹起遮挡输入框问题的解决方案代码解析,具体代码如下所示: extension LoginViewController:UITextFieldDelegate { func textFieldShouldReturn(_ textField: UITextField) -> Bool { textField.resignFirstResponder() //键盘收回,view放下 UIView.animate(withDuration: 0.4,

  • Swift让输入框跟随键盘弹起避免输入输入法挡住输入框问题

    第一步: 新建Controller 在Xcode选择File → New → File → Cocoa Touch Class 新建LoginViewController继承自UIViewController 第二步:创建两个UITextField passwordInput: UITextField // 密码输入框 accountInput: UITextField // 帐号输入框 第三步:添加键盘KVO 在viewDidLoad方法添加下面两行代码 //当键盘弹起的时候会向系统发出一个通

  • Swift 3.1聊天界面键盘效果的实现详解

    前言 最近写的 Swift 项目里要实现一个聊天界面,在处理键盘弹出的时候遇到了一点麻烦. 麻烦就在于键盘弹出后如何处理屏幕和键盘的关系 经过一番死磕,终于做出了想要的效果,效果如下: 注:原本项目是 Swift 2.3 写的,为了写这篇博客,用 Swift 3.1 重新实现了一遍. 感受:方法名真的缩短了不少,

  • Swift实现监听键盘通知及一些处理详解

    前言 相信研究swift语言的开发者都多多少少了解或者精通Objective-C语言,熟练掌握Objective-C语言的开发者,在学习swift语言的过程中,是比较快速,而又轻松的.本文主要介绍的是关于Swift监听键盘通知及一些处理的相关资料,之前也做过类似的功能,但是在Swift上面的效果不是很好.今天整理了一下之前小项目中的代码和思路,很好的解决了在登录界面登录按钮被键盘遮挡的问题. 先看效果图 如下 注册键盘通知 //MARK:监听键盘通知 func registerNotificat

  • Swift 开发之懒加载的实例详解

    Swift 开发之懒加载的实例详解 /// A display link that keeps calling the `updateFrame` method on every screen refresh. private lazy var displayLink: CADisplayLink = { self.isDisplayLinkInitialized = true let displayLink = CADisplayLink(target: TargetProxy(target:

  • Android 全局通知弹窗示例分析详解

    目录 需求分析 一.Dialog的编写 二.获取当前显示的Activity的弱引用 三.封装和使用 需求分析 如何创建一个全局通知的弹窗?如下图所示. 从手机顶部划入,短暂停留后,再从顶部划出. 首先需要明确的是: 1.这个弹窗的弹出逻辑不一定是当前界面编写的,比如用户上传文件,用户可能继续浏览其他页面的内容,但是监听文件是否上传完成还是在原来的Activity,但是Dialog的弹出是需要当前页面的上下文Context的. 2.Dialog弹窗必须支持手势,用户在Dialog上向上滑时,Dia

  • iOS10最新实现远程通知的开发教程详解

    一.iOS推送通知简介 众所周知苹果的推送通知从iOS3开始出现, 每一年都会更新一些新的用法. 譬如iOS7出现的Silent remote notifications(远程静默推送), iOS8出现的Category(分类, 也可称之为快捷回复), iOS9出现的Text Input action(文本框快捷回复). 而在iOS10, 苹果可谓是大刀阔斧般的, 对远程通知和本地通知进行了大范围的更新. iOS10推出了全新的UserNotifications框架(iOS10之前从属于UIKi

  • iOS开发系列--通知与消息机制详解

    概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是本地通知:另一类是推送通知,也叫远程通知.两种通知在iOS中的表现一致,可以通过横幅或者弹出提醒两种形式告诉用户,并且点击通知可以会打开应用程序,但是实现原理却完全不同.今天就和大家一块去看一下如何在iOS中实现这两种机制,并且在文章后面会补充通知中心的内容避免初学者对两种概念的混淆. 本地通知 本地通

  • Swift的开发环境搭建以及基本语法详解

    Swift环境设置 在编写Swift程序之前,需要先设置好Swift开发环境.Swift提供了一个Playground平台用于学习目的,我们同样也需要设置.需要提供给 Xcode 软件的 Swift 编码在 Playground 中.如果熟悉Swift概念,那么可以使用Xcode IDE来做ISO/OS X应用程序的开发. 首先,需要在苹果开发者网站上的注册帐户(本教程假设你有开发者帐号). 如果已登录苹果网站,请访问以下链接: Download for Apple Developers 这将列

  • Android开发 -- 状态栏通知Notification、NotificationManager详解

    本想自己写一个的,但是看到这篇之后,我想还是转过来吧,实在是非常的详细: 在Android系统中,发一个状态栏通知还是很方便的.下面我们就来看一下,怎么发送状态栏通知,状态栏通知又有哪些参数可以设置? 首先,发送一个状态栏通知必须用到两个类:  NotificationManager . Notification. NotificationManager :  是状态栏通知的管理类,负责发通知.清楚通知等. NotificationManager 是一个系统Service,必须通过 getSys

  • Swift如何调用Objective-C的可变参数函数详解

    前言 这个问题是一个朋友问我怎么写,一开始我是拒绝的.我想这种东西网上随便 google 下不就有了吗.他说,查了,但没大看明白.于是我就查了下,没想到这个写法确实有点诡异,我第一反应也没看明白.所以随便水一篇文章,强行完成本周的博客任务,顺便给朋友一个交代. 本文分为两部分,第一部分是 Swift 怎么调用 Objective-C 的可变参数函数,第二部分是 Objective-C 怎么调用 Swift 的可变参数函数. Swift 调用 Objective-C 的可变参数函数 先写一个例子

  • iOS系统的底层通知框架库示例详解

    观察者模式 观察者模式是一种用于解耦一系列需要相互协作的类之间进行通信的对象行为模式.它定义了对象之间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知.观察者模式的实现一般分为两个步骤:消费者注册通知消息监听器.生产者发送通知消息. iOS系统提供了多种对观察者模式的实现:在Cocoa Touch层通过NSNotification类和NSNotificationCenter类来实现通知消息的注册处理和发送,而在CoreFoundation层则提供了CFNotif

  • Swift中图片资源使用流程的优化方法详解

    前言 去年发布的Xcode9支持在代码编辑中直接插入图片,类似如下效果 但用了一段时间以后还是不太喜欢,换回了原来的方法. 本篇中许多实现细节已经在 iOS中多语言本地化流程的优化中写过,没再重复,若有疑问建议先阅读该文章. 传统的方法 // iOS let closeImage = UIImage(named: "close") // macOS let closeImage = NSImage(named: NSImage.Name("close")) 是不是看

随机推荐