Swift 키보드 숨기기

2932 단어
일상적인 iOS의 App 개발 과정에서 편집UITextfeildUITextView에서 키보드에 숨겨진 문제가 자주 발생한다.
  • 키보드 꺼짐
  • 키보드 가리기UITextfeild 또는 UITextView
  • 따라서 절대 다수의 장면에 적응할 수 있는 코드 한 줄에 키보드를 숨기는 방법을 공유한다.

    도입 코드 세그먼트


    모든 .swift 파일에 다음 코드를 도입합니다
    import UIKit
    
    private var kUIViewFrame = "kk_UIViewFrame"
    extension UIViewController {
        
        func setUpKeyboardAutoHidden() {
            let notficaCenter = NSNotificationCenter.defaultCenter()
            let tapGesture = UITapGestureRecognizer(target: self, action: #selector(UIViewController.touchedHiddenKeyBoard))
            
            objc_setAssociatedObject(self, &kUIViewFrame, NSValue(CGRect: self.view.frame), .OBJC_ASSOCIATION_RETAIN)
            
            //   tap  ,    
            notficaCenter.addObserverForName(
                UIKeyboardWillShowNotification,
                object: nil,
                queue: NSOperationQueue.mainQueue()) { (notification) -> Void in
                    self.view.addGestureRecognizer(tapGesture)
            }
            
            //   Tap  ,   App  UIResponder   
            notficaCenter.addObserverForName(
                UIKeyboardWillHideNotification,
                object: nil,
                queue: NSOperationQueue.mainQueue()){ (notification) -> Void in
                    self.view.removeGestureRecognizer(tapGesture)
            }
            
            //       
            notficaCenter.addObserverForName(
                UIKeyboardWillChangeFrameNotification,
                object: nil,
                queue: NSOperationQueue.mainQueue()) { (notification) -> Void in
                    let usrInfo = notification.userInfo!
                    let keyboardRect = usrInfo[UIKeyboardFrameEndUserInfoKey]!.CGRectValue
                    if let respView = self.view.findFirstResponder {
                        
                        let convertRect = self.view.convertRect(respView.frame, fromView: respView.superview)
                        let offset = convertRect.origin.y + convertRect.height - keyboardRect.origin.y
                        var orignRect = objc_getAssociatedObject(self, &kUIViewFrame).CGRectValue
                        
                        if offset > 0 {
                            orignRect.origin.y = -offset
                        }
                        
                        UIView.animateWithDuration(0.3, animations: { () -> Void in
                            self.view.frame = orignRect
                        })
                    }
            }
        }
        
        //        
        func touchedHiddenKeyBoard() {
            self.view.endEditing(true)
        }
    }
    

    사용


    위 코드 세그먼트를 도입한 후 키보드 숨기기를 구성해야 하는UIViewController에 다음 코드를 추가합니다.
    class ViewController: UIViewController {
        override func viewDidLoad() {
            super.viewDidLoad()
            
            //       
            setUpKeyboardAutoHidden()
        }
    }
    

    문장은 나의 개인 블로그에서 나온 것이니, 만약 옮겨 싣으려면 출처를 밝혀 주십시오.

    좋은 웹페이지 즐겨찾기