2012-02-28 6 views
3

現在、私はカスタムセルを持つUITableViewを持っており、各セルにはUITextFieldがありますが、UITextFieldがUIKeyboardで覆われることがあるという問題があります。カスタムUITableViewCellをキーボードのすぐ上にスクロールしますか?

今私はUIKeyboardのY座標があり、私のUITableViewはセルで正しく機能しています。

私はそのY座標(浮動小数点数)を使用して、そのU座標をそのY座標に加えてセルの高さをスクロールして、UIスキンボードの直上で取得することができますか?

キーボードを隠すと、UITableViewを元の位置にリセットする方法はありますか?

アドバイスをいただければ幸いです!

ありがとうございます!

CustomCell *cell = (CustomCell*)[[thetextField superview] superview]; 
    CGRect cellRect = [cell convertRect:cell.frame toView:self.view]; 
    float bottomCell = cellRect.origin.y - cellRect.size.height; 
    if (bottomCell >= keyboardY) { 
     NSIndexPath *indexPath = [thetableView indexPathForCell:cell]; 
     [thetableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES]; 
    } 
+0

'scrollToRowAtIndexPath'メソッドはtableViewの可視部分を知っているので、if文は必要ありません。 – inorganik

答えて

2

つまたは

- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated; 
- (void)scrollToNearestSelectedRowAtScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated; 

UITableView年代の他の私は、コントロールは、if文になっていないことを推測しています。どこにあるかにかかわらず、テーブルビューをスクロールするだけでY座標チェックをスキップすることを検討してください。あなたはそれが呼ばなってき確信している場合

CustomCell *cell = (CustomCell *)[[theTextField superview] superview]; 
NSIndexPath *indexPath = [theTableView indexPathForCell:cell]; 
[theTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES]; 

OK、その後、セルはのtableViewではない場合や、それが細胞ではない場合に発生する可能性がある、必ずあなたのindexPathがnilでないことを確認してください。

+0

最初のものを試しましたが、インデックスパスがあり、UITableViewScrollPositionTopを実行して、どこでもスクロールしません。 –

+0

コードを投稿してください。 – QED

+0

私はそれを上に投稿しました:) P.S - if文が呼び出される(NSLogsで確認されました) –

0

キーボードが表示されるたびに、UITableView自体が調整されます。

ただし、カスタムセルのUITableViewCellSelectionStyleUITableViewCellSelectionStyleNoneに設定していないとしません。

以下のコードを使用して解決しました。

[cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 
関連する問題