(Swift)移开视图以避开键盘?

时间:2015-10-05 19:59:34

标签: ios swift debugging keyboard

我有一个奇怪的问题,我移动我的视图为传入的键盘腾出空间。基本上,在我的应用程序中,有一个执行segue的按钮,该按钮以模态方式推送嵌入在导航控制器内部的视图控制器的新实例。在第一个实例中,我的键盘代码完美无缺。代码如下:

func keyboardWillShow(sender: NSNotification) {
    if !keyBoard {
        self.view.frame.origin.y -= 200
    }
    keyBoard = true
}

func keyboardWillHide(sender: NSNotification) {
    if keyBoard {
        self.view.frame.origin.y += 200
    }
    keyBoard = false
}

在viewDidLoad中使用以下内容:

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

我还添加了一个tapGestureRecognizer,这样当键盘显示并且用户点击屏幕上的任意位置时,键盘就会关闭:

let tapped = UITapGestureRecognizer(target: self, action: "closeKeyboard")
tapped.numberOfTapsRequired = 1
self.view.addGestureRecognizer(tapped)

func closeKeyboard() {
    self.view.endEditing(true)
}

所以在第一个例子中,这段代码完美无缺。然而,在我回去之后,调用self.dismissViewControllerAnimated,并且,一旦我在原始屏幕上,再次单击调用performSegue的按钮并推送同一个视图控制器的新实例,代码中断并且视图不再移出键盘的方式,但只是一些口吃和弹跳一点点。我不知道为什么会这样,任何帮助都会非常感激。谢谢!

1 个答案:

答案 0 :(得分:0)

尝试在keyboardWillShowkeyboardWillHide上设置断点,并告诉我在返回第二个ViewController时是否调用这两个方法。