下面我把自己的解决方法介绍一下,    键

作者: 编程  发布:2019-12-10
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.view.endEditing(true)
    }

        self.scrollView.setContentOffset(CGPoint(x: 0, y: 0), animated: true)

appD.allowRotation = true

    // 键盘改变
    func keyboardWillChange(notification: NSNotification) {
        if let userInfo = notification.userInfo,
            let value = userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue,
            let duration = userInfo[UIKeyboardAnimationDurationUserInfoKey] as? Double,
            let curve = userInfo[UIKeyboardAnimationCurveUserInfoKey] as? UInt {

            let frame = value.cgRectValue

            var intersection = frame.intersection(self.view.frame)
            //当键盘消失,让view回归原始位置
            if intersection.height == 0.0 {
                intersection = CGRect(x: intersection.origin.x, y: intersection.origin.y, width: intersection.width, height: 100)
            }
            UIView.animate(withDuration: duration, delay: 0.0,
                                       options: UIViewAnimationOptions(rawValue: curve), animations: {
                                        _ in
                                        //改变下约束
                                        self.bottomConstraint.constant = intersection.height
                                        self.view.layoutIfNeeded()
            }, completion: nil)
        }
    }

        tfConfirmPWD.delegate = self

view.backgroundColor = UIColor.green

      在学习开发登陆页的时候,遇到的问题分享如下:

大体思路:使用键盘通知UIKeyboardWillShow和UIKeyboardWillHide,配合UITextFieldDelegate代理方法func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool解决。实现如下图所示的界面:

override func viewDidLoad() {

    顺便吐槽一下,从安卓转过来,发现好多问题给出的解决方案都是 Object-C ,而且 Swift 版本更迭,变化很大,网上很多的解决方案经常需要自己微小调动才能正常使用。给我这样的新手带来好多麻烦。

        super.viewDidLoad()

return .portrait

             name: NSNotification.Name.UIKeyboardWillChangeFrame, object: nil)

图片 1

var allowRotation = false

        NotificationCenter.default.addObserver(self, selector:#selector(keyboardWillChange(notification:)),  

        textFieldTmp = textField

}else {

    首先是swift 3.0 中,NotificationCenter 设置 selector 如下:

        return true

if allowRotation {

    键盘改变事件,防止键盘遮住输入框

private var textFieldTmp:UITextField?

func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {

  @IBOutlet weak var bottomConstraint: NSLayoutConstraint!    //注意这里要在storyboard对最底部的控件设置约束,然后连线到.swift文件进行绑定

    func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {

case .landscapeLeft, .landscapeRight:

    后续肯定还会遇到很多问题,我会尽量把我遇到的问题以及解决办法记录下来供后来者学习。

        }

let appD = UIApplication.shared.delegate as? AppDelegate

    注:开发环境是Xcode 8.1   测试平台是 iOS 10.0 

///mark - UITextFieldDelegate

self.navigationController?.navigationBar.isHidden = true

        super.viewDidLoad()

        tfRealName.delegate = self

NotificationCenter.default.addObserver(self, selector: #selector(orinationNotification), name: .UIDeviceOrientationDidChange, object: nil)

    } 

func keyboardWillAppear(_ notification:Notification){//键盘出现

}

  override func viewDidLoad() {

邮箱注册

}

    点击空白处取消弹出的键盘

       let rect = textFieldTmp?.convert((textFieldTmp?.frame)!, to: self.scrollView)//这里要看上面的那些textFiled是不是嵌套在别的view上,否则获取的rect是不准确的

}

        做app开发,经常会遇到输入框被键盘遮住的情况,譬如注册界面有很多信息需要输入,点击靠屏幕下方的输入框就会遇到输入框被键盘遮住的情况。查阅网上的很多资料,有的是仅依靠UITextField的三个代理方法加上写死键盘的高度来解决的,还有的是依靠一个第三方库IQKeyboardManager,依靠第三方库固然节省了很多开发时间,但是如果你的项目仅仅只是注册界面一个界面用到,导入库反而没有自己几句代码写的方便。下面我把自己的解决方法介绍一下,供大家参考。

添加方法

(注释:下面代码使用Swift语言,OC语言同理)

super.viewDidLoad()

        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillAppear(_:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)

self.navigationController?.navigationBar.isHidden = false

    }

}

        tfPWD.delegate = self

view.backgroundColor = UIColor.red

        tfEmail.delegate = self

添加属性

            let yOffset = keyboardHeight - (kScreenHeight - kNavigationAndStatusBarHeight - ((rect?.origin.y)! + 44))

default:

注意:如果是小屏幕手机的话,按下面三个输入框的时候,键盘就会遮住输入框

@objc fileprivate func orinationNotification() {

    }

appdelegate.swift

@IBOutlet weak var scrollView: UIScrollView!

return .all  // 支持自动横竖屏,  如果需要强制横竖屏就设置landscapeLeft/landscapeRight

    }

监听横竖屏事件

        tfAuthCode.delegate = self

如果那个控制器需要支持横竖屏 。 

要注意两个问题:1、不是所有系统键盘高度都是一样的,需要去动态获取 

switch orient {

2、键盘通知和代理方法textFieldShouldBeginEditing的调用是代理方法先调用,键盘通知后调用

let orient = UIDevice.current.orientation

}

}

希望对大家有所帮助

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

override func viewDidLoad() {

//一定要写上代理,不然下面的textFieldDelegate方法不会执行

        let keyboardInfo = notification.userInfo![UIKeyboardFrameBeginUserInfoKey]

        let keyboardHeight = (keyboardInfo! as AnyObject).cgRectValue.size.height//键盘高度

            self.scrollView.setContentOffset(CGPoint(x: 0, y: yOffset), animated: true)

解决方案:

    func keyboardWillDisapear(_ notification:Notification) {//键盘消失

        if kScreenHeight - kNavigationAndStatusBarHeight - ((rect?.origin.y)! + 44) < keyboardHeight {

本文由9159.com发布于编程,转载请注明出处:下面我把自己的解决方法介绍一下,    键

关键词: