2011-05-23 13 views
5

私はUITextFieldを持つUITableViewCellを持っています。編集モードでは、キーボードが現れたときに、編集しようとしている行がキーボードで重なってしまいます。理想的には、セルを編集できるように行が上にスクロールする必要があります。キーボードを表示しているときにテーブルビューセルをスクロールさせる

私はstackoverflow throughlyを検索し、いくつかの異なる解決策を見つけました。それらのほとんどは、ビューを移動またはスクロールするための計算と関連しています。今、AppleからTaggedLocationsというサンプルコードがあります。彼らはまったく同じ振る舞いをしています。また、ビューを上に移動するための複雑な計算を行うコードはありません。

また、IBインターフェイスも完全にチェックされていて、やっかいなことは見つけられませんでした。コードをダウンロードして実行すると、行が編集のための完璧な位置に美しくプッシュアップされます。

TaggedLocationsプロジェクトにはどんなトリックがあるのですか?プロジェクトの場所:私は、例えば、以下のスレッドを見て、言及していた複雑な計算のために http://developer.apple.com/library/ios/#samplecode/TaggedLocations/Introduction/Intro.html%23//apple_ref/doc/uid/DTS40008914

How to make a UITextField move up when keyboard is present?

おかげ

答えて

1

問題を見つけました。 は当初、私は TabBarController

を持っていた - のUIViewController
- UINavigationController
---のUITableViewController

- のUIViewController
-
-UINavigationController ---のUITableViewController

のこの種のキーボードが表示されているときにテーブルセルはロールアップされません。しかし、私が階層を次のように変更すると、追加のコードなしでうまくいきます。

TabBarController
- UINavigationController
- のUITableViewController

- UINavigationController
- のUITableViewController

私はアップルのコードを複製したとき、私は何とか階層を台無しに。今度は新しい階層に切り替えるとうまくいきます。 追加のコードや計算は必要ありません。

+0

私はまったく同じ問題を抱えていますが、あなたの問題を解決したことをあなたが指摘しました。しかし、私の問題はまだ残っています。それが起こる原因となる他の問題を見つけましたか? –

+0

ありがとうございます。あなたの答えは本当に助けになりました。あなたの階層からUIViewControllerを取り除くことができない場合は、あなたのテーブルビューアコントローラをルートとしてUINavigationControllerを作成し、VCにサブビューとしてナビゲーションコントローラのビューを追加することができます。それはいくつかの1つを助けることを願って! – Vignesh

1

RootViewController.mでこの行は原因ですスクロール:

[self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES]; 

cellForRowAtIndexPath:メソッドとそれは動作するはずです。

+0

私はそれを試みました。それではない。それは新しいイベントを追加するためだけに作用します。表示されている場合、スクロールも編集のために機能します。また、タグの選択にも同様の動作があり、前述のスクロールコードはありません。さらに、cellForRowAtIndexPath:メソッドにはありません。 – mbh

+0

申し訳ありませんが、 'cellForRowAtIndexPath:'はおそらくそれを配置する最良の方法ではありません。あなたのクラスをUITextFieldDelegateに準拠させるのはどうでしょうか? 'textFieldDidBeginEditing'では、テキストフィールドがある行のインデックスパスをそのメソッドで上記のコード行を呼び出しますか?私は実際にAppleのコードを掘り下げませんでしたが、 "scrollToRowAtIndexPath"はあなたが望むものと正確に思われます... –

+0

申し訳ありませんが、正しいコードではありません。それは動作しません。たとえそれをコメントアウトしても、同じ動作が得られます。 – mbh

0

を呼び出すか、独自のコントローラ階層を持っている場合はviewWillAppearを呼び出すと、キーボードビューでセルが表示されるようにテーブルビューが自動的にスクロールします。

0

私の場合、私のテーブルビューはUITableViewControllerサブクラスではなくUIViewControllerサブクラスで管理されていて、UITableViewControllerは明らかにスクロールを管理していますが、AppleのサンプルコードTaggedLocationsと同様の混乱がありました。それは非常にうまくいくので、これらの複雑な計算の多くは不要です。私はそれらを理解しようと多くの時間を費やさなかったことを願っています。

あなたが記述する階層が重要である理由はわかりません。 UITableViewControllerがテキストフィールドを管理している限り、キーボードを避けるために自動的にスクロール処理が行われます。