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

时间:2015-03-05 00:24:30

标签: ios swift nsnotificationcenter

我有一个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
}

1 个答案:

答案 0 :(得分:1)

您可以使用UITextField/View委托在文本字段开始编辑时收到通知。 E.g。

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

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

E.g。

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.
    }
}