代码之家  ›  专栏  ›  技术社区  ›  chinmai

显示键盘隐藏聊天页文本

  •  0
  • chinmai  · 技术社区  · 6 年前

    当键盘出现在视图控制器上时,隐藏页面顶部消息。 enter image description here

    enter image description here

    0 回复  |  直到 6 年前
        1
  •  0
  •   ArunPrasath    6 年前

    在键盘上使用textfield有两种类型

    第1类

    您必须声明textfield并遵循通知观察者,就像我在应用程序中所做的那样。 像这样宣布

    var textField: UITextField?
    

    func registerForKeyboardNotifications()
    {
        //Adding notifies on keyboard appearing
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWasShown:", name: UIKeyboardWillShowNotification, object: nil)
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillBeHidden:", name: UIKeyboardWillHideNotification, object: nil)
    }
    
    
    func deregisterFromKeyboardNotifications()
    {
        //Removing notifies on keyboard appearing
        NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillShowNotification, object: nil)
        NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillHideNotification, object: nil)
    }
    
    func keyboardWasShown(notification: NSNotification)
    {
    
        self.scrollView.scrollEnabled = true
        var info : NSDictionary = notification.userInfo!
        var keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue().size
        var contentInsets : UIEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardSize!.height, 0.0)
    
        self.scrollView.contentInset = contentInsets
        self.scrollView.scrollIndicatorInsets = contentInsets
    
        var aRect : CGRect = self.view.frame
        aRect.size.height -= keyboardSize!.height
        if let activeFieldPresent = textField
        {
            if (!CGRectContainsPoint(aRect, textField!.frame.origin))
            {
                self.scrollView.scrollRectToVisible(textField!.frame, animated: true)
            }
        }
    
    
    }
    
    
    func keyboardWillBeHidden(notification: NSNotification)
    {
        var info : NSDictionary = notification.userInfo!
        var keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue().size
        var contentInsets : UIEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, -keyboardSize!.height, 0.0)
        self.scrollView.contentInset = contentInsets
        self.scrollView.scrollIndicatorInsets = contentInsets
        self.view.endEditing(true)
        self.scrollView.scrollEnabled = false
    
    }
    
    func textFieldDidBeginEditing(textField: UITextField!)
    {
        textField = textField
    }
    
    func textFieldDidEndEditing(textField: UITextField!)
    {
        textField = nil
    }
    

    必须在VC的Viewdidload函数中声明此代码

    self.textField.delegate = self
    

    第二种类型

    在编写texFieldDidBeginEditing函数时,如果您在使用iboutlet时没有声明textfield,那么在连接到textfields时将声明两件事

    Touchupinside 
    TouchDidBeginEditing
    

    最后你必须给出函数。在情节提要中连接代理 写这个代码。

     func registerForKeyboardNotifications()
        {
            //Adding notifies on keyboard appearing
            NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWasShown:", name: UIKeyboardWillShowNotification, object: nil)
            NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillBeHidden:", name: UIKeyboardWillHideNotification, object: nil)
        }
    
    
        func deregisterFromKeyboardNotifications()
        {
            //Removing notifies on keyboard appearing
            NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillShowNotification, object: nil)
            NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillHideNotification, object: nil)
        }
    
        func keyboardWasShown(notification: NSNotification)
        {
    
            self.scrollView.scrollEnabled = true
            var info : NSDictionary = notification.userInfo!
            var keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue().size
            var contentInsets : UIEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardSize!.height, 0.0)
    
            self.scrollView.contentInset = contentInsets
            self.scrollView.scrollIndicatorInsets = contentInsets
    
            var aRect : CGRect = self.view.frame
            aRect.size.height -= keyboardSize!.height
            if let activeFieldPresent = textField
            {
                if (!CGRectContainsPoint(aRect, textField!.frame.origin))
                {
                    self.scrollView.scrollRectToVisible(textField!.frame, animated: true)
                }
            }
    
    
        }
    
    
        func keyboardWillBeHidden(notification: NSNotification)
        {
            var info : NSDictionary = notification.userInfo!
            var keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue().size
            var contentInsets : UIEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, -keyboardSize!.height, 0.0)
            self.scrollView.contentInset = contentInsets
            self.scrollView.scrollIndicatorInsets = contentInsets
            self.view.endEditing(true)
            self.scrollView.scrollEnabled = false
    
        }