iOS swift4,单击多个UITextFields,;键盘显示时,向上移动的UIButton不知道为什么向下移动
多个iOS swift4,单击多个UITextFields,;键盘显示时,向上移动的UIButton不知道为什么向下移动,ios,swift,Ios,Swift,多个UITextField,软键盘显示,单击一个UITextField时,ui按钮向上移动 单击空白区域时键盘关闭 现在键盘显示,单击另一个UITextField,ui按钮向下移动,此时键盘仍显示,我不想让ui按钮向下移动 为什么当键盘显示时,ui按钮向下移动 Gif屏幕截图 单击1:键盘显示 单击2:键盘隐藏 单击3:键盘显示 单击4:键盘显示,但我不希望ui按钮下移 继续单击3和4,ui按钮仍在下方 双击UITextField,则ui按钮将从新窗口向上移动 下面是代码 class Lo
UITextField
,软键盘显示,单击一个UITextField
时,ui按钮向上移动
单击空白区域时键盘关闭
现在键盘显示,单击另一个UITextField
,ui按钮
向下移动,此时键盘仍显示,我不想让ui按钮
向下移动
为什么当键盘显示时,ui按钮
向下移动
Gif屏幕截图
- 单击1:键盘显示
- 单击2:键盘隐藏
- 单击3:键盘显示
- 单击4:键盘显示,但我不希望
ui按钮下移
- 继续单击3和4,
ui按钮仍在下方
- 双击
UITextField
,则ui按钮将从新窗口向上移动
下面是代码
class LoginPasswordViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var phoneInput: UITextField! // this is the first UITextField
@IBOutlet weak var passwordInput: UITextField! // this is the second UITextField
@IBOutlet weak var btnOK: UIButton! // this is the UIButton, it move up when Soft keyboard show.
fileprivate var btnOKOriginY: CGFloat!
fileprivate var isShow: Bool?
override func viewDidLoad() {
super.viewDidLoad()
// observer keyboard show
NotificationCenter.default.addObserver(
self,
selector: #selector(keyboardWillShow),
name: NSNotification.Name.UIKeyboardWillShow,
object: nil)
// observer keyboard hide
NotificationCenter.default.addObserver(
self,
selector: #selector(keyboardWillHide),
name: NSNotification.Name.UIKeyboardWillHide,
object: nil)
}
@objc func keyboardWillHide(_ notification: Notification) {
btnOK.frame.origin.y = btnOKOriginY
isShow = false
}
@objc func keyboardWillShow(_ notification: Notification) {
if let keyboardFrame: NSValue = notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue {
print("btnOK.frame.origin.y = ", btnOK.frame.origin.y)
if isShow ?? false && btnOK.frame.origin.y != btnOKOriginY{
return
}
isShow = true
if btnOKOriginY == nil {
btnOKOriginY = btnOK.frame.origin.y
}
let keyboardRectangle = keyboardFrame.cgRectValue
let keyboardHeight = keyboardRectangle.height
btnOK.frame.origin.y = btnOKOriginY - keyboardHeight
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
closeSoftKey()
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
closeSoftKey()
return true
}
func closeSoftKey() {
phoneInput.resignFirstResponder()
passwordInput.resignFirstResponder()
}
}
类登录PasswordViewController:UIViewController,UIExtFieldDelegate{
@IBOutlet弱var phoneInput:UITextField!//这是第一个UITextField
@IBOutlet弱var密码输入:UITextField!//这是第二个UITextField
@IBOutlet弱var btnOK:UIButton!//这是UIButton,当软键盘显示时,它会向上移动。
fileprivate var btnOKOriginY:CGFloat!
fileprivate var isShow:Bool?
重写func viewDidLoad(){
super.viewDidLoad()
//观察家键盘秀
NotificationCenter.default.addObserver(
自己
选择器:#选择器(键盘将显示),
名称:NSNotification.name.UIKeyboardWillShow,
对象:无)
//观察者键盘隐藏
NotificationCenter.default.addObserver(
自己
选择器:#选择器(键盘将隐藏),
名称:NSNotification.name.UIKeyboardWillHide,
对象:无)
}
@objc func键盘将隐藏(uu通知:通知){
btnOK.frame.origin.y=btnOKOriginY
isShow=false
}
@objc func键盘将显示(uu通知:通知){
如果让keyboardFrame:NSValue=notification.userInfo?[UIKeyboardFrameEndUserInfoKey]作为?NSValue{
打印(“btnOK.frame.origin.y=,btnOK.frame.origin.y”)
如果是show??false&&btnOK.frame.origin.y!=btnOKOriginY{
返回
}
isShow=true
如果btnOKOriginY==nil{
btnOKOriginY=btnOK.frame.origin.y
}
设keyboardRectangle=keyboardFrame.cgRectValue
让keyboardHeight=keyboardRectangle.height
btnOK.frame.origin.y=btnOKOriginY-键盘高度
}
}
重写函数didReceiveMemoryWarning(){
超级。我收到了记忆警告()
//处置所有可以重新创建的资源。
}
覆盖函数touchesend(touchs:Set,带有事件:UIEvent?){
关闭软键()
}
func textField应该返回(textField:UITextField)->Bool{
关闭软键()
返回真值
}
func关闭软键(){
phoneInput.resignFirstResponder()辞职
passwordInput.resignFirstResponder()辞职
}
}
ui按钮的初始化通过swift
code,问题不再
下面是代码,其他不变
var btnOK: UIButton!
func initUIButton() {
btnOK = UIButton(frame: CGRect(x: self.view.frame.width - 55 - 16,
y: self.view.frame.height - 55 - 32,
width: 55,
height: 55))
btnOK.setImage( imageLiteral(resourceName: "ic_next"), for: .normal)
self.view.addSubview(btnOK)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
initUIButton()
}
这看起来不对,如果是这样的话??false&&btnOK.frame.origin.y!=我想它应该是不=<代码>btnOK.frame.origin.y!=btnOKOriginY
表示如果现在是y
==btnOKOrignY,我需要向上移动btnOK
。switch UITextField not call键盘将隐藏方法。但是btnOK
已经下移了