试图从键盘后面取消隐藏UITextView

时间:2015-04-03 02:56:48

标签: xcode swift

我使用下面的代码取消隐藏UITextFields。它工作得很好,直到我尝试取消隐藏UITextView。它崩溃了,试图解开一个零值的错误。我的问题是我需要实现什么来使UITextView像UITextFields一样取消隐藏?或者我是否需要使用UITextView旁边的内容来允许段落样式输入?

class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var textField1: UITextField!
@IBOutlet weak var textField2: UITextField!
@IBOutlet weak var notesInput: UITextView!

    @IBOutlet weak var scrollView: UIScrollView!
    var activeTextField: UITextField!
// MARK: - View
override func viewDidLoad() {
    super.viewDidLoad()
    self.textField1.delegate = self
    self.textField2.delegate = self

 //   self.textField3.delegate = self
 //   self.textField4.delegate = self
 //   self.textField5.delegate = self
}

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

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    self.unregisterFromKeyboardNotifications()
}

// MARK: - Keyboard

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

func unregisterFromKeyboardNotifications () {
    let center:  NSNotificationCenter = NSNotificationCenter.defaultCenter()
    center.removeObserver(self, name: UIKeyboardDidShowNotification, object: nil)
    center.removeObserver(self, name: UIKeyboardWillHideNotification, object: nil)
}

// Called when the UIKeyboardDidShowNotification is sent.
func keyboardWasShown (notification: NSNotification) {
    let info : NSDictionary = notification.userInfo!
    let kbSize = (info.objectForKey(UIKeyboardFrameBeginUserInfoKey)?.CGRectValue() as CGRect!).size

    let contentInsets: UIEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.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 = self.view.frame
    aRect.size.height -= kbSize.height;
    if (!CGRectContainsPoint(aRect, self.activeTextField.frame.origin) ) {
        self.scrollView.scrollRectToVisible(self.activeTextField.frame, animated: true)
    }
}

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

// MARK: -  Text Field

func textFieldDidBeginEditing(textField: UITextField) {
    self.activeTextField = textField
}

func textFieldDidEndEditing(textField: UITextField) {
    self.activeTextField = nil
}

0 个答案:

没有答案