2011-12-21 78 views
15

[編輯:]問題已解決。我沒有在UIBuilder中正確鏈接我的代表。代碼很好!當鍵盤到位時移動UIScrollView

我想在鍵盤出現時調整scrollview的大小。我去了開發人員文檔並找到了這些信息。

http://developer.apple.com/library/ios/#documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html#//apple_ref/doc/uid/TP40009542-CH5-SW1

左側的 「管理鍵盤」。

在文檔中它顯示了一些代碼來檢測鍵盤的大小,然後調整UIScrollView的大小。我已經在代碼中放置一個NSLog消息功能- (void)keyboardWasShown:(NSNotification*)aNotification,所以我看到這個函數實際上是被調用,但是當我嘗試到NSLogkbSize .height它始終爲0。

價值爲什麼會出現代碼蘋果爲此提供了不起作用?

- (void)keyboardWasShown:(NSNotification*)aNotification 
{ 
    NSDictionary* info = [aNotification userInfo]; 
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 

    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0); 
    scrollView.contentInset = contentInsets; 
    scrollView.scrollIndicatorInsets = contentInsets; 

    // If active text field is hidden by keyboard, scroll it so it's visible 
    // Your application might not need or want this behavior. 
    CGRect aRect = self.view.frame; 
    aRect.size.height -= kbSize.height; 
    if (!CGRectContainsPoint(aRect, activeField.frame.origin)) { 
     CGPoint scrollPoint = CGPointMake(0.0, activeField.frame.origin.y-kbSize.height); 
     [scrollView setContentOffset:scrollPoint animated:YES]; 
    } 
} 
+0

非常感謝,的代碼段包含的一切,我需要:) – matehat 2013-06-28 18:39:54

+2

你可以使用[KBKeyboardObserver(https://github.com/kam800/KBKeyboardObserver)庫來觀察鍵盤事件。 – kam800 2013-11-06 20:37:24

回答

3

您是否曾經爲該特定通知添加了觀察者?請確保您的loadView方法你這樣做:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:nil]; 

不要忘記註銷上述觀察員viewDidUnload方法是這樣的:

[[NSNotificationCenter defaultCenter] removeObserver:self]; 

讓我知道你的作品了!

+0

我確實添加了觀察者,正如我所提到的,我可以看到鍵盤顯示時調用的函數,所以我確實知道觀察者正在工作。謝謝雖然總是很好地複查事情, – thenetimp 2011-12-21 19:30:47

+2

您需要更新此信息。 viewDidUnload不再被調用。 – 2013-10-20 12:57:42

33

您可能希望嘗試強烈推薦「TPKeyboardAvoidingScrollView」,可從以下https://github.com/michaeltyson/TPKeyboardAvoiding

就像一個魅力...

+1

+1易於實施,真的很好。我建議將它與BSKeyboardControl結合在文本字段中添加導航控件:http://www.cocoacontrols.com/controls/bskeyboardcontrols – Groot 2013-03-20 11:13:07

+0

@Reuven當使用TPKeyboardAvoidingScrollview時,有時如果我們在textview中複製並粘貼,視圖完全上升。 。有沒有解決方案? – 2014-02-21 14:03:48

+1

它是否與'UIPresentationModeFormSheet'協同工作? – fatuhoku 2014-05-08 14:24:08

0

我已經與UITableView做過幾次(這只是一個擴展UIScrollView)。你可以找到code in this answer

0

一個簡單的解決方案是將擴展的UIViewController + Keyboard.swift添加到您的項目中,有一行

setupKeyboardNotifcationListenerForScrollView(scrollView) 

它會自動自動調整鍵盤出現時。無需任何子類,只是一個擴展!它availble的由GitHub SingleLineKeyboardResize