TextField исчезает при редактировании Swift 4 - PullRequest
0 голосов
/ 20 ноября 2018

Итак, у меня есть ViewController, внутри него у меня есть TableView, а внизу - View, который содержит TextField и Button.

Когда появляется клавиатура, я пытался поместить вид внизу чуть выше клавиатуры, и мой вид появляется только в том случае, если я размещаю вид спереди так: self.view.bringSubviewToFront (SendMessageView) (Просто чтобы быть понятным, мой Вид видимый, и я могу видеть его, он исчезает, только когда я пытаюсь переместить его поверх клавиатуры, когда он появляется) Так что теперь, когда я могу видеть свой Вид, когда я поднес его над клавиатурой, когда я начинаю что-то печатать, мой Вид мгновенно исчезает, и я не понимаю, почему, и я не знаю, как это исправить. Надеюсь, я четко объяснил свою проблему Ниже вы найдете весь мой код:

import UIKit
import Foundation

class Chat_user: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate {

@IBOutlet weak var SendMessageView: UIView!
@IBOutlet weak var SendMessageInput: UITextField!
@IBOutlet weak var SendButton: UIButton!
@IBOutlet weak var MessageList: UITableView!

var cellMessage: CustomMessage!
var count = 0

override func viewDidLoad() {
    super.viewDidLoad()

    let singleTapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.test))
    singleTapGestureRecognizer.numberOfTapsRequired = 1
    singleTapGestureRecognizer.isEnabled = true
    singleTapGestureRecognizer.cancelsTouchesInView = false
    self.view.addGestureRecognizer(singleTapGestureRecognizer)
    SendMessageInput.delegate = self
    self.view.bringSubviewToFront(SendMessageView)
    self.view.bringSubviewToFront(SendMessageInput)
    self.view.bringSubviewToFront(SendButton)
    self.view.sendSubviewToBack(MessageList)
    self.tabBarController?.tabBar.isHidden = true
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)
}

@objc func test(sender: UITapGestureRecognizer) {
    self.view.endEditing(true)
}

override func viewWillDisappear(_ animated: Bool) {
    self.tabBarController?.tabBar.isHidden = false
}

@objc func keyboardWillShow(notification: NSNotification) {
    if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
        self.SendMessageView.frame.origin.y -= keyboardSize.height
        self.MessageList.frame.origin.y -= keyboardSize.height
        let indexPath = NSIndexPath(row: self.count - 1, section: 0)
        self.MessageList.scrollToRow(at: indexPath as IndexPath, at: .bottom, animated: true)
    }
}

@objc func keyboardWillHide(notification: NSNotification) {
    if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
        self.SendMessageView.frame.origin.y += keyboardSize.height
        self.MessageList.frame.origin.y += keyboardSize.height
    }
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    self.count = 10
    return (self.count)
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    self.cellMessage = tableView.dequeueReusableCell(withIdentifier: "message", for: indexPath) as? CustomMessage
    return (cellMessage)
}

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    self.view.endEditing(true)
    return true
}
}

Заранее спасибо,

Arkning

1 Ответ

0 голосов
/ 20 ноября 2018

Это известная проблема с фрейм-макетом, вам нужно перетащить нижнее ограничение SendMessageView и внутрь

@objc func keyboardWillShow(notification: NSNotification) {
    if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
        self.SendMessageViewBottCon.constant += keyboardSize.height
        self.view.layoutIfNeeded()
        let indexPath = NSIndexPath(row: self.count - 1, section: 0)
        self.MessageList.scrollToRow(at: indexPath as IndexPath, at: .bottom, animated: true)
    }
}

@objc func keyboardWillHide(notification: NSNotification) { 
      self.SendMessageViewBottCon.constant = 0 
      self.view.layoutIfNeeded() 
}

Если вам нужна анимация, вставьте

UIView.animate(withDuration: 0.25, animations: {
     self.view.layoutIfNeeded()
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...