键盘在swift中隐藏UITextField

问题描述:

我有一个由代码添加的UITextField,当键盘打开时,它隐藏了文本框。 我搜索了很多,并得到了相同的结果,她是我的代码,苹果文档建议,但它仍然不工作!键盘在swift中隐藏UITextField

import Foundation 
import UIKit 

class testkey: UIViewController, UITextFieldDelegate { 

    var txt1: UITextField! = nil 
    var scrollView: UIScrollView! = nil 

    var activeTextField: UITextField! 

    override func viewDidLoad() { 

     txt1 = UITextField(frame: CGRect(x: 0, y:250, width: 223, height: 30)) 
     txt1.text = "text" 
     txt1.borderStyle = UITextBorderStyle.RoundedRect 
     txt1.delegate = self 

     scrollView = UIScrollView(frame: CGRect(x: 0, y: 0, width: 225.00, height: 290)); 
     scrollView.addSubview(txt1) 

     self.view.addSubview(scrollView) 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
    } 

    // Call this method somewhere in your view controller setup code. 
    func registerForKeyboardNotifications() { 
     let notificationCenter = NSNotificationCenter.defaultCenter() 
     notificationCenter.addObserver(self, 
      selector: "keyboardWillBeShown:", 
      name: UIKeyboardWillShowNotification, 
      object: nil) 
     notificationCenter.addObserver(self, 
      selector: "keyboardWillBeHidden:", 
      name: UIKeyboardWillHideNotification, 
      object: nil) 
    } 

    // Called when the UIKeyboardDidShowNotification is sent. 
    func keyboardWillBeShown(sender: NSNotification) { 
     let info: NSDictionary = sender.userInfo! 
     let value: NSValue = info.valueForKey(UIKeyboardFrameBeginUserInfoKey) as NSValue 
     let keyboardSize: CGSize = value.CGRectValue().size 
     let contentInsets: UIEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardSize.height, 0.0) 
     scrollView.contentInset = contentInsets 
     scrollView.scrollIndicatorInsets = contentInsets 

     // If active text field is hidden by keyboard, scroll it so it's visible 
     // Your app might not need or want this behavior. 
     var aRect: CGRect = self.view.frame 
     aRect.size.height -= keyboardSize.height 
     let activeTextFieldRect: CGRect? = activeTextField?.frame 
     let activeTextFieldOrigin: CGPoint? = activeTextFieldRect?.origin 
     if (!CGRectContainsPoint(aRect, activeTextFieldOrigin!)) { 
      scrollView.scrollRectToVisible(activeTextFieldRect!, animated:true) 
     } 
    } 


    // Called when the UIKeyboardWillHideNotification is sent 
    func keyboardWillBeHidden(sender: NSNotification) { 
     let contentInsets: UIEdgeInsets = UIEdgeInsetsZero 
     scrollView.contentInset = contentInsets 
     scrollView.scrollIndicatorInsets = contentInsets 
    } 

    func textFieldDidBeginEditing(textField: UITextField!) { 
     activeTextField = textField 
     scrollView.scrollEnabled = true 
    } 

    func textFieldDidEndEditing(textField: UITextField!) { 
     activeTextField = nil 
     scrollView.scrollEnabled = false 
    } 

    override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(animated) 
     self.registerForKeyboardNotifications() 
    } 

    override func viewDidDisappear(animated: Bool) { 
     super.viewWillDisappear(animated) 
     NSNotificationCenter.defaultCenter().removeObserver(self) 
    } 

    func textFieldShouldReturn(textField: UITextField!) -> Bool // called when 'return' key pressed. return NO to ignore. 
    { 
     textField.resignFirstResponder() 
     return true; 
    } 

} 

(假设数学是正确的),你应该用的是UIKeyboardFrameEndUserInfoKey而不是UIKeyboardFrameBeginUserInfoKey。
请检查Keyboard Notification User Info Keys

+0

尝试,但仍然没有工作! – user1386213 2015-01-15 15:27:29

的文档,我发现缺少的一部分, 以下应滚动视图改变:

scrollView = UIScrollView(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height)); 
     scrollView.contentSize = self.view.frame.size;