2016-05-24 6 views
0

Ich benutze UIKeyboardWillShowNotification, um die Ansicht nach oben und unten zu blättern, wenn die Tastatur aufgerufen wird. Dies funktioniert in den meisten Fällen gut. Die Tastatur verfügt jedoch über einen Fertig-Button, der ein UIAlert erzeugen kann. Ohne das UIAlert gibt es kein Problem, aber wenn das UIAlert aufgerufen wird, passiert mit der Scrollview etwas Seltsames, es scheint zu funktionieren, bis die Größe kleiner wird.UIKeyboardWillShowNotification und UIAlert

Dies ist der Code Ich verwende:

func adjustInsetForKeyboardShow(show: Bool, notification: NSNotification) { 
    guard let value = notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue else { return } 
    let keyboardFrame = value.CGRectValue() 
    let adjustmentHeight = (CGRectGetHeight(keyboardFrame) + 70) * (show ? 1 : -1) 


    scrollView.contentInset.bottom += adjustmentHeight 
    //scrollView.scrollIndicatorInsets.bottom += adjustmentHeight 
} 

func keyboardWillShow(notification: NSNotification) { 
    if keyboardVisible == false { 
    adjustInsetForKeyboardShow(true, notification: notification) 
    keyboardVisible = true 
    } 
} 

func keyboardWillHide(notification: NSNotification) { 
    adjustInsetForKeyboardShow(false, notification: notification) 
    keyboardVisible = false 
} 

deinit { 
    NSNotificationCenter.defaultCenter().removeObserver(self) 
} 

die Tastatur hat dann einen Knopf, der den folgenden Code hat:

func displayAlert(title:String, message:String, view:UIViewController){ 
    let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert) 
    alert.addAction(UIAlertAction(title: "Ok", style: .Default, handler: { (action) -> Void in 
    })) 
    view.presentViewController(alert, animated: true, completion: nil) 
} 

Das Ergebnis ist, dass der Alarm gegeben wird, dann, wenn Ich drücke die OK-Taste, der Bildlauf bricht ab.

Kann jemand helfen? Lassen Sie mich wissen, wenn Sie mehr Code benötigen

+0

Versuchen Sie, Ihre 'displayAlert()' -Funktion aufzurufen, nachdem die Tastatur vollständig geschlossen wurde. – ZGski

Antwort

0

Ich würde erstens empfehlen, Tabellenansicht statt der Bildansicht zu verwenden, wenn möglich. Zweitens, ich weiß nicht, ob Sie getestet haben, aber diese Benachrichtigungen werden mehr als einmal aufgerufen und verhalten sich manchmal nicht so, wie Sie es erwarten. Ich habe es nicht ausprobiert, aber ich nehme an, dass sobald Sie UIAlert anzeigen, eine dieser Methoden ausgelöst wird und dann Ihre Inhaltsgröße verrückt wird. Versuchen Sie, Breakpoints zu setzen und zu sehen, was passiert. Versuchen Sie auch, die Tastatur bei der Rückkehr zu verwerfen, und rufen Sie dann displayAlert() auf. Auch aus Erfahrung wird diese Deinit-Methode, bei der Sie Beobachter entfernen, nicht aufgerufen, wenn Sie vom Bildschirm gehen, ich weiß nicht, ob Sie einen Grund haben, sie zu benutzen oder? Es ist besser, viewWillAppear, viewWillDissapear-Methoden zu verwenden.

+0

Danke Nermin, deine Antwort hat mir geholfen, dem auf den Grund zu gehen. Die Antwort war eigentlich sehr dumm. Wie Sie darauf hingewiesen haben, sind die Benachrichtigungen nicht so zuverlässig. Manchmal werden sie mehr als einmal aufgerufen, wie Sie darauf hingewiesen haben. Um dies zu verhindern, verwende ich eine Tastatur, um es effizienter zu überwachen. Ich habe dummerweise vergessen, das 'if keyboardVisible == true {...} zur keyboardWillHide hinzuzufügen. Problem gelöst! – LateNate