当用户触摸文本视图时显示键盘时,我将如何向上推动视图?

How would I push a view upwards when keyboard is shown when user touches a text view?

我有一个 VC,其中有 3 个元素(顶部有 2 个文本字段,底部有 1 个文本视图)。不幸的是,当键盘出现时,底部的文本视图被隐藏了。当用户点击或触摸底部的文本视图时,我想向上推我的视图,但当他们触摸顶部的 2 个文本字段时,我不想向上推。我找到了一个将我的视图向上推的解决方案,但它在触摸 3 个元素中的任何一个时起作用,从而隐藏了顶部的 2 个文本字段。如何应用下面的代码,使其仅在用户触摸文本视图时起作用?

@IBOutlet weak var firstTopTextField: UITextField!
@IBOutlet weak var secondTopTextField: UITextField!
@IBOutlet weak var bottomTextView: UITextView!

override func viewDidLoad() {
    super.viewDidLoad()

    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name:UIKeyboardWillShowNotification, object: nil);
    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name:UIKeyboardWillHideNotification, object: nil);

}

func keyboardWillShow(sender: NSNotification) {
    self.view.frame.origin.y -= 160
}

func keyboardWillHide(sender: NSNotification) {
    self.view.frame.origin.y += 160
}

您可以使用 UITextField/View 代理在文本字段开始编辑时得到通知。例如

- (void)textFielDidBeginEditing:(UITextField *)textField
{
    // Push screen up
}

值得注意的是,如果用户连接了外接键盘,屏幕键盘将不会显示,但屏幕仍会向上推。您可以通过 BOOL(或者我现在应该说 var)告诉您键盘是否显示来避免这种情况。

例如

var isShown = false

func keyboardWillShow(sender:NSNotification) {
    isShown = true
}

func keyboardWillHide(sender:NSNotification) {
    isShown = false
}

func textFieldDidBeginEditing(textField:UITextField) {
    if isShown == true {
        // Push screen up.
    }
}