【问题标题】:Ios Messaging app, How to controll the keyboardIos Messaging 应用程序,如何控制键盘
【发布时间】:2016-07-02 12:05:30
【问题描述】:

我已经在 im 应用上开发了。当用户点击文本字段时,键盘弹出,包含消息的表格视图向上移动,但表格视图的顶部不可见,因为它不在屏幕上。当用户向上或向下移动键盘建议时,它还会导致屏幕变黑

override func viewWillAppear(animated:Bool) {
    super.viewWillAppear(animated)

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



func keyboardWillShow(notification: NSNotification) {
    if let userInfo = notification.userInfo {
        if let keyboardSize =  (userInfo[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() {
            kbHeight = keyboardSize.height
            self.animateTextField(true)
        }
    }
}

func keyboardWillHide(notification: NSNotification) {
    self.animateTextField(false)
}

func animateTextField(up: Bool) {
    let movement = (up ? -kbHeight : kbHeight)

    UIView.animateWithDuration(0.2, animations: {
        self.view.frame = CGRectOffset(self.view.frame, 0, movement)
    })
}

如何控制表格视图、文本字段和键盘的显示?

编辑

期望的行为。 从头开始

  • 我希望折叠视图键盘(工作正常)
  • 显示消息的表格视图(工作正常)
  • 和屏幕底部的文本字段(工作正常)

点击文本字段时

  • 键盘弹出(工作)
  • 文本字段移动到键盘顶部(工作)
  • 表格视图显示在文本字段上方的剩余空间中(不起作用,它在文本字段上方但一半溢出屏幕到顶部)

其他错误

  • 在键盘顶部显示/隐藏自动完成单词时屏幕变黑

【问题讨论】:

  • 您的问题是什么,您的预期行为是什么?也是ViewController 还是TableViewController
  • @sken3r.MI , 如何控制表格视图、文本字段和键盘的显示?它是一个视图控制器
  • 我对您的问题一无所知。当用户点击文本字段时你想隐藏键盘吗?
  • @emresancaktar 不,当我隐藏键盘时很好。见编辑
  • 这对你的理解有帮助吗?

标签: ios swift uitableview keyboard


【解决方案1】:

我找到了解决方案,它对我有用。

请签入您的项目。 (Eendje 的解决方案)

Resize the screen when keyboard appears

您可以创建表格视图底部自动布局约束的出口。

然后只需使用以下代码:

func keyboardWillShow(sender: NSNotification) {
    let info = sender.userInfo!
    var keyboardSize = (info[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue().height
    bottomConstraint.constant = keyboardSize - bottomLayoutGuide.length

    let duration: NSTimeInterval = (info[UIKeyboardAnimationDurationUserInfoKey] as! NSNumber).doubleValue

    UIView.animateWithDuration(duration) { self.view.layoutIfNeeded() }
}

func keyboardWillHide(sender: NSNotification) {
    let info = sender.userInfo!
    let duration: NSTimeInterval = (info[UIKeyboardAnimationDurationUserInfoKey] as! NSNumber).doubleValue
    bottomConstraint.constant = 0

    UIView.animateWithDuration(duration) { self.view.layoutIfNeeded() }
}

如果您在创建底部约束时遇到问题:

在故事板中

选择您的搜索栏。 在右下角,您会看到 3 个图标。单击看起来像 |-[]-| 的中间那个。 在该弹出窗口的顶部,有 4 个框。在底部输入 0。 已创建约束! 现在你可以将它拖到你的视图控制器上,并将它添加为一个插座。

另一种解决方案是设置tableView.contentInset.bottom。但我以前没有这样做过。如果你愿意,我可以试着解释一下。

使用插图:

func keyboardWillShow(sender: NSNotification) {
    let info = sender.userInfo!
    var keyboardSize = (info[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue().height

    tableView.contentInset.bottom = keyboardSize
}

func keyboardWillHide(sender: NSNotification) {
    tableView.contentInset.bottom = 0
}

您可以尝试使用此代码设置插图。我自己还没有尝试过,但应该是这样的。

我使用约束解决方案来解决我的问题。

【讨论】:

  • 将检查并回复您
【解决方案2】:

试试这个键盘。

-viewDidLoad()

let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "dismissKeyboard")
view.addGestureRecognizer(tap)

func dismissKeyboard(){
    view.endEditing(true)
}

【讨论】:

  • 同样,问题不在于显示或关闭键盘,而在于键盘出现时其他元素的显示。
猜你喜欢
  • 1970-01-01
  • 2017-04-22
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多