Guten tag zusammen,
ich wollte gerade ein View per Knopfdruck ausfahren lassen, habe dafür die folgende Funktion geschrieben:
Leider verändert sich jedoch nichts beim drücken des Textfields.
Vielen Dank für eure Hilfe!
Tom
Wichtig wäre noch zu sagen, dass ich den View per Code erstellt habe. Hier der restliche Code des ViewControllers falls benötigt:
Alles anzeigen
ich wollte gerade ein View per Knopfdruck ausfahren lassen, habe dafür die folgende Funktion geschrieben:
Leider verändert sich jedoch nichts beim drücken des Textfields.
Vielen Dank für eure Hilfe!
Tom
Wichtig wäre noch zu sagen, dass ich den View per Code erstellt habe. Hier der restliche Code des ViewControllers falls benötigt:
Quellcode
- import UIKit
- import Parse
- class ChatViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate {
- private let reuseIdentifer = "ChatCell"
- var titleLabel: UILabel!
- var backButton: UIButton!
- let tableView = UITableView()
- var dockView: UIView!
- var dockTextField: UITextField!
- var dockSendButton: UIButton!
- var messages = [String]()
- var userName = [String]()
- var othersMessages = [String]()
- var othersUserName = [String]()
- var refresher: UIRefreshControl = UIRefreshControl()
- override func viewDidLoad() {
- super.viewDidLoad()
- view.backgroundColor = .lightGray
- retrieveMessages()
- createViewControllerItems()
- self.dockTextField.delegate = self
- }
- func createViewControllerItems() {
- // - MARK: DockView
- dockView = UIView()
- dockView.backgroundColor = .lightGray
- view.addSubview(dockView)
- dockView.translatesAutoresizingMaskIntoConstraints = false
- dockView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
- dockView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
- dockView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
- dockView.topAnchor.constraint(equalTo: tableView.bottomAnchor).isActive = true
- // - MARK: TextField
- dockTextField = UITextField()
- dockTextField.placeholder = "Nachricht"
- dockTextField.backgroundColor = .white
- dockTextField.borderStyle = .roundedRect
- dockTextField.keyboardType = .default
- //dockTextField.addTarget(self, action: #selector(startEditing), for: .editingDidBegin)
- dockView.addSubview(dockTextField)
- dockTextField.translatesAutoresizingMaskIntoConstraints = false
- dockTextField.topAnchor.constraint(equalTo: dockView.topAnchor, constant: 5).isActive = true
- dockTextField.leftAnchor.constraint(equalTo: dockView.leftAnchor, constant: 30).isActive = true
- dockTextField.widthAnchor.constraint(equalToConstant: 270).isActive = true
- // - MARK: Senden Button
- dockSendButton = UIButton()
- dockSendButton.setTitle("Senden", for: UIControl.State.normal)
- dockSendButton.setTitleColor(.darkGray, for: UIControl.State.normal)
- dockSendButton.addTarget(self, action: #selector(savingMessage), for: .touchUpInside)
- dockView.addSubview(dockSendButton)
- dockSendButton.translatesAutoresizingMaskIntoConstraints = false
- dockSendButton.topAnchor.constraint(equalTo: dockView.topAnchor, constant: 5).isActive = true
- dockSendButton.centerXAnchor.constraint(equalTo: dockView.centerXAnchor, constant: 150).isActive = true
- }
- @objc func backMenu() {
- let vc: MainViewController!
- vc = MainViewController()
- vc.modalPresentationStyle = .fullScreen
- present(vc, animated: true)
- }
- func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
- return messages.count
- }
- func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
- let cell = tableView.dequeueReusableCell(withIdentifier: reuseIdentifer, for: indexPath) as! ChatCell
- cell.descriptionLabel.text = messages[indexPath.row]
- cell.userNameLabel.text = userName[indexPath.row]
- return cell
- }
- override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
- self.view.endEditing(true)
- }
- @objc func dismissKeyboard() {
- view.endEditing(true)
- }
- func tableViewTapped() {
- self.dockTextField.endEditing(true)
- }
- @objc func startEditing() {
- let chatToolBar = UIToolbar()
- chatToolBar.sizeToFit()
- //Costumisazions
- chatToolBar.barTintColor = .gray
- chatToolBar.tintColor = .white
- let jobDoneButton = UIBarButtonItem(title: "Fertig", style: .plain, target: self, action: #selector(ChatViewController.dismissKeyboard))
- chatToolBar.setItems([jobDoneButton], animated: false)
- chatToolBar.isUserInteractionEnabled = true
- dockTextField.inputAccessoryView = chatToolBar
- }
- func textFieldDidBeginEditing(_ textField: UITextField) {
- self.view.layoutIfNeeded()
- UIView.animate(withDuration: 0.5, animations: {
- self.dockView.heightAnchor.constraint(equalToConstant: 400).isActive = true
- self.view.layoutIfNeeded()
- }, completion: nil)
- let chatToolBar = UIToolbar()
- chatToolBar.sizeToFit()
- //Costumisazions
- chatToolBar.barTintColor = .gray
- chatToolBar.tintColor = .white
- let jobDoneButton = UIBarButtonItem(title: "Fertig", style: .plain, target: self, action: #selector(ChatViewController.dismissKeyboard))
- chatToolBar.setItems([jobDoneButton], animated: false)
- chatToolBar.isUserInteractionEnabled = true
- dockTextField.inputAccessoryView = chatToolBar
- }
- func textFieldDidEndEditing(_ textField: UITextField) {
- self.view.layoutIfNeeded()
- UIView.animate(withDuration: 0.5, animations: {
- self.dockView.heightAnchor.constraint(equalToConstant: 60).isActive = true
- self.view.layoutIfNeeded()
- }, completion: nil)
- }
- @objc func savingMessage() {
- self.dockTextField.endEditing(true)
- self.dockTextField.isEnabled = false
- self.dockSendButton.isEnabled = false
- let newMessageObject: PFObject = PFObject(className: "Message")
- newMessageObject["Text"] = self.dockTextField.text
- newMessageObject["Userid"] = PFUser.current()?.objectId
- newMessageObject["username"] = PFUser.current()?.username
- //newMessageObject["Othersid"] = ""
- //newMessageObject["otherUsername"] = ""
- newMessageObject.saveInBackground { (succeeded, error) in
- if (succeeded) {
- print("Gespeichert.")
- } else {
- print("ERROR: Speichern fehlgeschlagen.")
- }
- self.dockTextField.text = nil
- self.dockSendButton.isEnabled = true
- self.dockTextField.isEnabled = true
- }
- self.retrieveMessages()
- }
- @objc func retrieveMessages() {
- let query:PFQuery = PFQuery(className: "Message")
- query.findObjectsInBackground { (objects:[AnyObject]!, error:Error!) -> Void in
- self.messages = [String]()
- for messageObject in objects {
- let messageText:String? = (messageObject as! PFObject)["Text"] as? String
- let userName:String? = (messageObject as! PFObject)["username"] as? String
- if messageText != nil {
- self.messages.append(messageText!)
- self.userName.append(userName!)
- }
- }
- self.tableView.reloadData()
- }
- }
- func pullToRefresh() {
- refresher.attributedTitle = NSAttributedString(string: "Pull to refresh!")
- refresher.addTarget(self, action: #selector(retrieveMessages), for: UIControl.Event.valueChanged)
- tableView.addSubview(refresher)
- }
- }