Link zur Verwendung vorherige Frage: UITextField text jumpsUITextField Text springt iOS 9
Kurz: Ich habe ViewController
mit 2 UITextField
Elemente. Wenn loginField ist firstResponder nach
self.passwordField.becomeFirstResponder()
Text in Login-Feld auf die linke obere Ecke springt und zurück. Und was mehr ist seltsam: diese Panne nur erstes Mal wiedergibt, dann müssen Sie ViewController
neu dieses Verhalten
Hier wird Video von der Panne zu beobachten http://tinypic.com/player.php?v=6nsemw%3E&s=8#.VgVb3cuqpHx
ich damit endete (funktioniert nicht für iOS 9) :
func textFieldShouldReturn(textField: UITextField) -> Bool {
if textField === self.loginField {
self.loginField.resignFirstResponder()
// Shitty workaround. Hi, Apple!
self.loginField.setNeedsLayout()
self.loginField.layoutIfNeeded()
self.passwordField.becomeFirstResponder()
return false
}
return true
}
Gibt es jemanden, der mit diesem Fehler stecken geblieben ist? Irgendwelche Vorschläge?
Keyboard Benachrichtigungen Handler
Meine Hauptansicht ist UIScrollView, für die ich unten Raum Super ändern, so Benutzer kann den Inhalt blättern, auch wenn Tastatur
func keyboardWillShow(notification : NSNotification) {
let keyboardInfo = notification.userInfo!
let keyboardFrame = keyboardInfo[UIKeyboardFrameEndUserInfoKey]!.CGRectValue
let animDuration = keyboardInfo[UIKeyboardAnimationDurationUserInfoKey]!.doubleValue!
UIView.animateWithDuration(animDuration, animations: {
self.scrollViewBottom.constant = keyboardFrame.height
self.view.layoutIfNeeded()
let offsetY = CGRectGetMaxY(self.loginButton.frame) + 10 - self.scrollView.frame.height
if offsetY > 0 {
self.scrollView.contentOffset = CGPointMake(0, offsetY)
}
})
}
func keyboardWillHide(notification : NSNotification) {
self.scrollViewBottom.constant = 0
self.view.layoutIfNeeded()
}
gezeigt, wie ich Tastatur Mitteilungen entdeckt In iOS7 unterscheiden sich 8 und 9 sehr. In iOS 9 werden also Benachrichtigungen gesendet, wenn FirstResponder geändert wird, auch wenn die Tastatur nicht ein-/ausblenden wird. Wenn ich firstResponder durch Antippen von textField ändere (ohne auf die Tastatur zu tippen, die von meinem Code gehandhabt wird), gibt es nur eine KeyboardWillShow-Benachrichtigung und kein KeyboardWillHide. Und was mich betrifft, hat userinfo einige Werte trash Rahmen, hier einloggen, wenn Ersthelfer Ändern nächste Taste (funktioniert ok, ohne Pannen):
2015-10-07 12: 54: 13,870 keyboardWillHide: [ UIKeyboardFrameBeginUserInfoKey: NSRect: {{0, 352}, {320, 216}}, UIKeyboardCenterBeginUserInfoKey: NSPoint: {160, 460}, UIKeyboardFrameEndUserInfoKey: NSRect: {{0, 568}, {320, 216}}, UIKeyboardCenterEndUserInfoKey : NSPoint: {160, 676}, UIKeyboardAnimationDurationUserInfoKey: 0,25, UIKeyboardIsLocalUserInfoKey: 1, UIKeyboardBoundsUserInfoKey: NSRect: {{0, 0}, {320, 216}}, UIKeyboardAnimationCurveUserInfoKey: 7] 2015.10.07 12: 54: 13,896 keyboardWillShow: [UIKeyboardFrameBeginUserInfoKey: NSRect: {{0, 352}, {320, 216}}, UIKeyboardCenterBeginUserInfoKey: NSPoint: {160, 460}, UIKeyboardFrameEndUserInfoKey: NSRect : {{0, 352}, {320, 216}}, UIKeyboardCenterEndUserInfoKey: NSPoint: {160, 460}, UIKeyboardAnimationDurationUserInfoKey: 0,25, UIKeyboardIsLocalUserInfoKey: 1, UIKeyboardBoundsUserInfoKey: NSRect: {{0, 0}, {320 , 216}}, UIKeyboardAnimationCurveUserInfoKey: 7]
Und hier einloggen, wenn ich auf dem zweiten Textfield tippen:
2015-10-07 12:55:13.879 keyboardWillShow: [UIKeyboardFrameBeginUserInfoKey: NSRect: {{0, 352}, {320, 216}}, UIKeyboardCenterBeginUserInfoKey: NSPoint: {160, 460}, UIKeyboardFrameEndUserInfoKey: NSRect: {{0, 352}, {320, 216}}, UIKeyboardCenterEndUserInfoKey: NSPoint: {160, 460},
UIKeyboardAnimationDurationUserInfoKey: 0,25, UIKeyboardIsLocalUserInfoKey: 1, UIKeyboardBoundsUserInfoKey: NSRect: {{0, 0}, {320, 216}}, UIKeyboardAnimationCurveUserInfoKey: 7]
Auflösung
Ich entdeckte, dass ich einen anderen Tastatur-Controller habe, der Tastaturbenachrichtigungen empfängt und einige Animationen macht. Das ist, wo das Problem
Wie gehen Sie mit der Tastatur um? Haben Sie registrierte Benachrichtigungen für die Tastatur erscheint/verstecken? Wenn ja, kannst du den Code posten, was du dort machst? – haluzak
Tnx für die Hilfe, überprüfen Sie den bearbeiteten Post – user3237732
Sie erhalten wird verbergen Benachrichtigung, weil Sie ResignFirstResponder() vor BeeFirstResponder() aufrufen, das "Springen" wird durch die Animation in KeyboardWillShow() verursacht – haluzak