如果我正在使用两个文本字段,如何设置键盘

时间:2016-05-28 02:09:34

标签: ios swift keyboard

我几天前一直试图设置我的键盘,但我无法做到。当我在底部文本字段中书写时,我只希望imageView向上移动。事实上,它正在发挥作用,但当我尝试在topTextField写作时它也会向上移动。我不希望这样,因为当发生这种情况时,我看不到顶部的textField,我看不出我在写什么。

我将包含我的屏幕截图和我的代码。

this image中,我按topTextField来写一些内容,但正如您所见,topTextField已丢失。我的意思是当我按下topTextField并且我不想要时,视图会向上移动。我想要的是,当我按下topTextField时,键盘会出现,但视图应该在同一个地方。

the last one中,我按了textFieldBottom,正如您所看到的,它有效。视图向上移动,所以我可以看到我在textFieldBottom内写的内容。

这是我的代码:

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

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    self.unsubscribeToKeyBoardNotifications()
    self.unsubscribeToKeyBoardNotificationsDown()
}
func subscribeToKeyboardNotifications() {
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.keyboardWillShow(_:)) , name: UIKeyboardWillShowNotification, object: nil)
}
func unsubscribeToKeyBoardNotifications() {
NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillShowNotification, object: nil)
}

func keyboardWillShow(notification: NSNotification) {
    view.frame.origin.y -= getKeyboardHeight(notification)
}
func subscribeToKeyboardNotificationsDown() {
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.keyboardWillHide(_:)), name: UIKeyboardWillHideNotification,  object: nil)
}

func unsubscribeToKeyBoardNotificationsDown() {
    NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillHideNotification, object: nil)
}

func keyboardWillHide(notification: NSNotification) {
    view.frame.origin.y += getKeyboardHeight(notification)
}

func getKeyboardHeight(notification:NSNotification) -> CGFloat {
    let userInfo = notification.userInfo
    let keyboardSize = userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue
    return keyboardSize.CGRectValue().height
}

2 个答案:

答案 0 :(得分:0)

//做一件事保持一个全局变量来保存当前文本字段,这是基于变量u put条件移动imageview的编辑模式 以下示例代码将为您提供帮助。

var currentTextField: UITextField

func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
   currentTextField = textField
   return true
}

func keyboardWillShow(notification: NSNotification) {
     if currentTextField == textFieldBottom {
       view.frame.origin.y -= getKeyboardHeight(notification)
     } 
}

答案 1 :(得分:0)

当topTextField成为第一响应者时,您正在更改view.frame.origin,这会使您的topTextField向上移动。您可以为bottomTextField设置约束,而不是更改视图框架,并且可以在keyboardWillShow方法中以编程方式更改bottomTextField的约束。这样您的视图框架就不会改变,topTextField也不会向上移动。