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

第一步: 新建Controller

在Xcode选择File → New → File → Cocoa Touch Class

新建LoginViewController继承自UIViewController

第二步:创建两个UITextField

passwordInput: UITextField // 密码输入框
accountInput: UITextField // 帐号输入框

第三步:添加键盘KVO

在viewDidLoad方法添加下面两行代码

//当键盘弹起的时候会向系统发出一个通知,
//这个时候需要注册一个监听器响应该通知
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(LoginViewController.keyboardWillShow(_:)), name:UIKeyboardWillShowNotification, object: nil)
//当键盘收起的时候会向系统发出一个通知,
//这个时候需要注册另外一个监听器响应该通知
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(LoginViewController.keyboardWillHide(_:)), name:UIKeyboardWillHideNotification, object: nil)

添加全局控制参数

因为连续在两个或多个textfield之间切换时候,只会发送UIKeyboardWillShowNotification键盘显示通知,而不会发送UIKeyboardWillHideNotification键盘隐藏通知,这就需要一个全局参数控制键盘只在第一次点击输入框时候界面上移,该参数变为false,光标移到另一个输入框时界面不再变化。当关闭键盘时候,界面下移,并将这个参数恢复为默认值。

在类的第一行声明该变量:

var keyBoardNeedLayout: Bool = true

添加两个方法分别相应键盘弹起和键盘隐藏

键盘弹起响应

func keyboardWillShow(notification: NSNotification) {
print("show")
if let userInfo = notification.userInfo,
value = userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue,
duration = userInfo[UIKeyboardAnimationDurationUserInfoKey] as? Double,
curve = userInfo[UIKeyboardAnimationCurveUserInfoKey] as? UInt {
let frame = value.CGRectValue()
let intersection = CGRectIntersection(frame, self.view.frame)
let deltaY = CGRectGetHeight(intersection)
if keyBoardNeedLayout {
UIView.animateWithDuration(duration, delay: 0.0,
options: UIViewAnimationOptions(rawValue: curve),
animations: { _ in
self.view.frame = CGRectMake(0,-deltaY,self.view.bounds.width,self.view.bounds.height)
self.keyBoardNeedLayout = false
self.view.layoutIfNeeded()
}, completion: nil)
}
}
}

键盘隐藏响应

func keyboardWillHide(notification: NSNotification) {
print("hide")
if let userInfo = notification.userInfo,
value = userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue,
duration = userInfo[UIKeyboardAnimationDurationUserInfoKey] as? Double,
curve = userInfo[UIKeyboardAnimationCurveUserInfoKey] as? UInt {
let frame = value.CGRectValue()
let intersection = CGRectIntersection(frame, self.view.frame)
let deltaY = CGRectGetHeight(intersection)
UIView.animateWithDuration(duration, delay: 0.0,
options: UIViewAnimationOptions(rawValue: curve),
animations: { _ in
self.view.frame = CGRectMake(0,deltaY,self.view.bounds.width,self.view.bounds.height)
self.keyBoardNeedLayout = true
self.view.layoutIfNeeded()
}, completion: nil)
}
}

更进一步

如果输入框吸底,y的位移可以用-deltaY

self.view.frame = CGRectMake(0,-deltaY,self.view.bounds.width,self.view.bounds.height)

但是如果输入框在偏上的位置就有可能导致某个输入框移出界面视界,这时候可以把位移写成deltaY/2或者deltaY/4等,自己去尝试吧。

以上所述是小编给大家介绍的Swift让输入框跟随键盘弹起避免输入输入法挡住输入框问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索h5输入法挡住输入框、手机输入法挡住输入框、qq输入法输入框不跟随、输入法挡住输入框、html输入法挡住输入框,以便于您获取更多的相关知识。

时间: 2024-11-09 02:39:37

Swift让输入框跟随键盘弹起避免输入输入法挡住输入框问题_Swift的相关文章

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

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

ionic在开发ios系统微信时键盘挡住输入框的解决方法(键盘弹出问题)_javascript技巧

在使用ionic开发IOS系统微信的时候会有一个苦恼的问题,填写表单的时候键盘会挡住输入框,其实并不算什么大问题,只要用户输入一个字就可以立刻看见输入框了. 可惜的是,有些客户是不讲理的,他才不管这个问题,反正就是不行,所以在一天睡觉的时候突然惊醒,想出来这个方案. 我就不仔细讲代码了,直接上图 angular.module('MyApp') .directive('focusInput', ['$ionicScrollDelegate', '$window', '$timeout', '$io

input禁止键盘及中文输入,但可以点击

 这篇文章主要介绍了<input>禁止键盘及中文输入,但可以点击.需要的朋友可以过来参考下,希望对大家有所帮助 网上找了很多,不实用,要不兼容问题,这个可以! <input>禁止键盘及中文输入,但又不能用readonly 而且还需兼容ie 和 ff , 为了完成这功能费了蛮大功夫,呵呵,在此记录以便日后之用:另外禁止粘贴 onpaste="return false"  代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DT

客户端登录界面,根据输入框的弹出改变界面样式,解决键盘挡住输入框的问题

问题: 我们在开发Android应用中,登录和注册界面是少不了的,往往在做登录注册的时候如果给界面加一个LOGO, 就有可能把用户名和密码框放在手机屏幕的中间或底部,这样当软键盘弹出的时候,就有可能挡住输入框(往往用户输完用户名和密码还要按返回键盘才能登录), 这样用户体验是不好的,该demo是一个解决该问题相对比较好的一个方法了. 效果图对比 方法: 重写RelativeLayout获取当前屏幕高度,实现onMesure.onSizeChanged方法来实现. 直接上代码(2个java类,1个

c++-QT调用软键盘,要输入的编辑框在对话框Dialog中(UI界面),怎样才能使得软键盘输入到编辑框中

问题描述 QT调用软键盘,要输入的编辑框在对话框Dialog中(UI界面),怎样才能使得软键盘输入到编辑框中 10C 我参考QT中自带的一个软键盘的例子,问题是在输入编辑框的过程中需要使用到FocusWidget()函数,但是这个函数又是属于QWidget类的,而我用的编辑框是在Dialog下的,我想问的是有没有什么办法可以使得FocusWidget()在QDialog类下使用(我想实现的是FocusDialog()函数,可惜QDialog类中没有这个函数啊)C++学的不好,对类的理解不够,希望

关于android输入框被键盘遮挡的问题

  在android的开发中,将整个页面只使用LinearLayout编辑时,当点击输入框时,系统自带的虚拟键盘会遮挡住输入框,效果如下图,遮挡住了MSN输入框     此页面不出现虚拟键盘时是:    解决办法是在整个页面配置文件中,在LinearLayout布局外加入 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"     android:orientation="vert

VB多个输入框之间互相获取对方输入的数据

问题描述 VB多个输入框之间互相获取对方输入的数据 VB多个输入框之间互相获取对方输入的数据,怎么判断对方正在输入数据,并且显示"正在输入"的提示? 解决方案 两个输入框如果在一个窗口,直接在change事件里面处理就行了,否则可以使用窗体子类化拦截消息. 解决方案二: 可以使用keypress函数

linux 下的qt程序主键盘区无法输入

问题描述 系统环境:redhatenterpriselinux5.3内核2.6.28只装了xserver,并没有装桌面环境,系统设置为自动登录,并且开机后进入QT程序.问题描述:在qt程序的输入界面上,主键盘区域无法输入,但是小键盘区能输入.其中xorg.conf中已经设置了键盘类型为pc105和us的类型.希望各位豪杰帮忙看看,小弟万分感谢!

Android软键盘挡住输入框的终极解决方案_Android

前言 开发做得久了,总免不了会遇到各种坑. 而在Android开发的路上,『软键盘挡住了输入框』这个坑,可谓是一个旷日持久的巨坑--来来来,我们慢慢看. 入门篇 最基本的情况,如图所示:在页面底部有一个EditText,如果不做任何处理,那么在软键盘弹出的时候,就有可能会挡住EditText. 对于这种情况的处理其实很简单,只需要在AndroidManifest文件中对activity设置:android:windowSoftInputMode的值adjustPan或者adjustResize即