view verschieben, wenn Tastatur erscheint

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • view verschieben, wenn Tastatur erscheint

    Hallo zusammen,

    ich habe gerade programmiert, daß meine Tastatur, wenn ich in ein Textfeld klicke erscheint und nach Drücken der Return Taste wieder verschwindet. Zudem schiebt es alles nach oben, sobald die Tastatur erscheint, damit nichts von ihr verdeckt ist und geht wieder runter, wenn die Tastatur veschwindet.

    Da ich momentan noch im Anfänger- und Lernmodus bin, habe ich hierzu ein Tutorial befolgt und bin nun auf folgendes Problem gestoßen:

    Ich habe den Code in meiner TableViewCell stehen und dort steht nicht am Anfang override func ViewDidLoad() sondern override func awakeFromNib().
    Dies hat zur Folge, daß er am ende meines Codes mit dem Befehl die Höhe des Keyboards zu messen, mit dem Begriff view nichts anfangen kann (Zeile 53 und 55 im Code).

    Mit was ersetzte ich jetzt view oder geht das garnicht in einer TableViewCell?
    Logisch gedacht müsste es gehen, aber es fehlt wohl oben die Definition der view. Wer kann mir da mal auf die Sprünge helfen?
    Oder muß ich den Code in meinen ViewController packen?

    Anbei mein Code:

    Quellcode

    1. import UIKit
    2. class PaymentsMonthlyTVCell: UITableViewCell, UITextFieldDelegate {
    3. @IBOutlet weak var LabelPaymentsMonthly: UILabel!
    4. @IBOutlet weak var TextPaymentsMonthly: UITextField!
    5. override func awakeFromNib() {
    6. super.awakeFromNib()
    7. // Initialization code
    8. TextPaymentsMonthly.delegate = self
    9. self.TextPaymentsMonthly.layer.borderColor = UIColor(red: 200/255, green: 200/255, blue: 200/255, alpha: 1).cgColor
    10. self.TextPaymentsMonthly.layer.borderWidth = CGFloat(Float(1.0));
    11. //Listen for keyboard events
    12. NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(notification:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
    13. NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(notification:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
    14. NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(notification:)), name: NSNotification.Name.UIKeyboardWillChangeFrame, object: nil)
    15. }
    16. deinit {
    17. //stop listening for keyboard hide/show events
    18. NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillShow, object: nil)
    19. NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillHide, object: nil)
    20. NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillChangeFrame, object: nil)
    21. }
    22. override func setSelected(_ selected: Bool, animated: Bool) {
    23. super.setSelected(selected, animated: animated)
    24. // Configure the view for the selected state
    25. }
    26. // Methods or Functions
    27. func hideKeyboard() {
    28. TextPaymentsMonthly.resignFirstResponder()
    29. }
    30. @objc func keyboardWillChange(notification: Notification) {
    31. guard let keyboardRect = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue else {
    32. return
    33. }
    34. if notification.name == Notification.Name.UIKeyboardWillShow ||
    35. notification.name == Notification.Name.UIKeyboardWillChangeFrame {
    36. view.frame.origin.y = -keyboardRect.height
    37. } else {
    38. view.frame.origin.y = 0
    39. }
    40. }
    41. // Display will go back when clicking return
    42. func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    43. TextPaymentsMonthly.resignFirstResponder()
    44. return true
    45. }
    46. }
    Alles anzeigen
    Besten Dank!


    mac
  • Ich glaube, Du bist auf dem Holzweg: Die Notifications werden ja erst zu einem späteren Zeitpunkt getriggert. Dass Du die Observer in awakeFromNib initialisiert, ist also nicht das Problem.

    Aus welchem Grund machst Du das Keyboard-Handling in den UITableViewCells? Ich würde derartigen Code im passenden View-Controller unterbringen ... das hätte zur Folge, das auch das Property view gesetzt / bekannt ist. Eine UITableViewCell hat dieses Property nicht, sie stammt selber von UIView ab und hat nur entsprechende Sub-Views (schau mal hier).

    Also: Entweder den Code für das Keyboard-Handling dahin packen, wo er m. E. sein sollte (im ViewController) oder Du musst view anders referenzieren ... wobei mir nicht klar ist, was es für einen Effekt hat, wenn Du die UITableViewCell als solche über ihr Origin verschiebst. Dann vielleicht besser den Offset der UITableView verändern...

    HTH, Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.