2016-05-24 3 views
0

Я использую UIKeyboardWillShowNotification для прокрутки вида вверх и вниз при вызове клавиатуры. Это работает отлично по большей части. Однако на клавиатуре есть кнопка, которая может создавать UIAlert. Без UIAlert нет проблем, но если UIAlert называется чем-то странным, случается с scrollview, он, похоже, перестает работать, уменьшая его размер.UIKeyboardWillShowNotification и UIAlert

это код, я использую:

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) 
} 

клавиатура, то есть кнопка, которая имеет следующий код:

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) 
} 

Результат, что предупреждение дается, то при Я нажимаю кнопку ОК, прокрутка прокрутки.

Может ли кто-нибудь помочь? Дайте мне знать, если вам нужно больше кода

+0

Попробуйте вызвать функцию 'displayAlert()' после того, как клавиатура была полностью уволена. – ZGski

ответ

0

Сначала я бы рекомендовал вам использовать табличный вид вместо прокрутки, если это возможно. Во-вторых, я не знаю, были ли вы протестированы, но эти уведомления вызываются более одного раза, и они не ведут себя так, как вы ожидаете. Я не пробовал, но я предполагаю, что после отображения UIAlert один из этих методов запускается, а затем размер вашего контента сходит с ума. Попробуйте установить контрольные точки и посмотреть, что происходит. Также попробуйте отменить клавиатуру при возврате, а затем вызвать displayAlert(). Кроме того, по опыту этот метод deinit, где вы удаляете наблюдателей, не вызывается, когда вы идете с экрана, я не знаю, есть ли у вас причина использовать его или? Лучше использовать методы viewWillAppear, viewWillDissapear.

+0

Спасибо Nermin, ваш ответ помог мне разобраться в этом. Ответ на самом деле был действительно глупым. Поскольку вы указали, что уведомления не являются надежными. Иногда их называют не раз, как вы указали. Чтобы этого не случилось, я добавляю keyboardVisible bool для более эффективного контроля. Я тупо забыл добавить «if keyboardVisible == true {...} к клавиатуреWillHide. Задача решена! – LateNate