2011-12-21 8 views
15

[編集:]問題は解決されました。私はUIBuilderに適切にリンクされた代議員を持っていませんでした。コードは良いです!キーボードが現れたときにUIScrollViewを移動

キーボードが表示されたら、スクロールビューのサイズを変更しようとしています。私は開発者のドキュメントに行き、この情報を見つけました。左の "キーボードの管理" を

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

ドキュメントでは、キーボードのサイズを検出してからUIScrollViewのサイズを変更するためのコードを示しています。私はので、私は関数が実際に呼び出されていることがわかり、私はそれは常に0

で評価され.height kbSizeNSLogためにしようとすると、なぜコードを行う機能- (void)keyboardWasShown:(NSNotification*)aNotificationのコードでNSLogメッセージを配置していることリンゴはこの目的のために働かない?

- (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

でそのavailbleで、コードのスニペットは、私が必要:) – matehat

+2

あなたがキーボードイベントを観察するために、[KBKeyboardObserver](https://github.com/kam800/KBKeyboardObserver)ライブラリを使用することができるすべてが含まれています。 – kam800

答えて

3

この特定の通知のためにオブザーバーを追加したことがありますか?

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

このようなviewDidUnload方法にオブザーバの登録を解除することを忘れないでください:

[[NSNotificationCenter defaultCenter] removeObserver:self]; 

はそれがうまくいくならば、私に教えてください!あなたはこれを行うあなたのloadView方法でいることを確認します

+0

私は、オブザーバを追加しました。キーボードが表示されたときに関数が呼び出されることがわかりましたので、オブザーバが動作していることはわかります。おかげでいつもダブルチェックのことが良い、 – thenetimp

+2

この投稿を更新する必要があります。 viewDidUnloadは呼び出されなくなりました。 –

33

あなたはから入手できる、非常にお勧め「TPKeyboardAvoidingScrollView」を試してみたいことがあります。魔法のようにhttps://github.com/michaeltyson/TPKeyboardAvoiding

作品...

+1

+1簡単に実装して本当に良い。テキストフィールドにナビゲーションコントロールを追加するには、BSKeyboardControlと組み合わせることをお勧めします。http://www.cocoacontrols.com/controls/bskeyboardcontrols – Groot

+0

@Reuven TPKeyboardAvoidingScrollviewを使用しているときに、テキストビューでコピーして貼り付けると、ビュー全体が上がってしまうことがあります。 。それのための解決策はありますか?.. –

+1

それは 'UIPresentationModeFormSheet'でも動作しますか? – fatuhoku

0

私はちょうどである(UITableViewでこれを数回やりました拡張UIScrollView)。 code in this answerが見つかります。

0

一つの簡単な解決策は、単一のライン

setupKeyboardNotifcationListenerForScrollView(scrollView) 

キーボードが表示されたら、それは自動的に自動的にサイズが変更されますと、プロジェクトに拡張子のUIViewController + Keyboard.swiftを追加することです。何もサブクラス化する必要はなく、ただ拡張子です!おかげでたくさんのGitHub SingleLineKeyboardResize

関連する問題