2016-05-24 94 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 {...}添加到keyboardWillHide中。問題解決了! – LateNate