2015-03-02 66 views
1

我有一個UIToolbar帶有一個文本框,當顯示鍵盤時應該向上移動。UIKeyboardWillShowNotification調用不動畫UIToolbar

在我viewWillAppear,註冊我的觀察:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillShow:", name: UIKeyboardWillShowNotification, object: nil) 

(viewWillDisappear刪除我的觀察者)

而且功能:

func keyboardWillShow(notification: NSNotification) { 
    println("will show") 

    let userInfo = notification.userInfo! 

    let keyboardFrame = (userInfo[UIKeyboardFrameEndUserInfoKey] as NSValue).CGRectValue() 
    let animationDuration = (userInfo[UIKeyboardAnimationDurationUserInfoKey] as NSNumber).doubleValue 

    let animations:() ->() = { 
     self.toolBar.frame.origin.y = self.view.frame.size.height - keyboardFrame.height - self.toolBar.frame.height 
    } 

    if animationDuration > 0 { 
     let options = UIViewAnimationOptions(UInt((userInfo[UIKeyboardAnimationCurveUserInfoKey] as NSNumber).integerValue << 16)) // http://stackoverflow.com/a/18873820/242933 
     UIView.animateWithDuration(animationDuration, delay: 0, options: options, animations: animations, completion: nil) 
    } else { 
     animations() 
    } 
} 

現在,當我點擊了UITextField,鍵盤出現並呼籲keyboardWillShow。但是直到keyboardWillShow被第二次調用(有多個鍵盤不工作,除非高度改變;例如當自動填充欄改變狀態時),動畫纔會發生。

我在做什麼錯?我看到的每個地方都以這種方式實施。

編輯:更多細節:

動畫()被調用與正確的高度爲工具欄,但用戶界面不會把工具欄在正確的位置。也許這是尚未初始化的東西?

更多詳細信息:當使用UIToolbar作爲inputAccessoryView時,當我點擊UITextField時,它不會出現在鍵盤上方,但是當我開始鍵入時,它確實如此。我在這裏用盡了...

甚至更​​多試圖找到問題:似乎運行任何其他動畫工作,如更改工具欄的高度。

回答

0

我已經找到了答案this GitHub repository這對我的作品

let animations:() ->() = { 
     if !(self.tableView.tracking || self.tableView.decelerating) { 
      // Move content with keyboard 
      if overflow > 0 {     // scrollable before 
       self.tableView.contentOffset.y += insetChange 
       if self.tableView.contentOffset.y < -insetOld.top { 
        self.tableView.contentOffset.y = -insetOld.top 
       } 
      } else if insetChange > -overflow { // scrollable after 
       self.tableView.contentOffset.y += insetChange + overflow 
      } 
     } 
    }