1

キーボードがアクティブなときに、テーブルビューをスクロールして、最後のセルを表示しようとしています。これは私がしていることtableView:cellForRowAtIndexPath:です...

if (keyboard) {

    CGFloat calculatedPosY = 70 * ([Array count]-1);
    MyTable.contentOffset = CGPointMake(0.0, calculatedPosY);

}

初めて正しく動作しますが、リロードテーブルがスクロールしない場合は2回目です。もう一度スクロールして、テーブルの最後のセルを表示します。または、コードが機能していて、ログに同じコンテンツオフセット(0,280)が表示されます。

私が間違っているのか教えてください。前もって感謝します。

4

3 に答える 3

1

2 つのことを行う必要があります。1) キーボードでカバーされていない画面の表示部分にテーブル ビューが収まるようにします。2) テーブルを最後の行までスクロールします。

ビューのサイズを変更するには、表示されるキーボードを検出するように登録します。

    [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector (keyBoardWillShow:)
                                             name: UIKeyboardWillShowNotification object: nil];

このkeyBoardWillShow:メソッドは、キーボードが表示され、テーブルビューのサイズを変更できるときに呼び出されます。

- (void)keyBoardWillShow:(NSNotification *)aNotification
{
    NSValue *value = [[aNotification userInfo] objectForKey: UIKeyboardFrameEndUserInfoKey];
    CGRect keyboardRect = [value CGRectValue];

    CGFrame tableFrame = self.tableView.frame;
    tableFrame.height -= keyboardRect.size.height 
    self.tableView.frame = tableFrame;
}

最後に、最後のセルまでスクロールします (必要にkeyBoardWillShow:応じてこれを実行できます)。

[tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:lastRowIndex inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:YES];
于 2012-12-10T11:12:58.973 に答える
0

– scrollToRowAtIndexPath:atScrollPosition:animated:を使用することをお勧めします。UITableViewのメソッドです。

于 2012-12-10T10:51:16.327 に答える
0

..ではしないでくださいtableView:cellForRowAtIndexPath:。このメソッドは、すべての配列要素を反復処理し、セルを作成します。これは、この計算が array[N] 回実行されることを意味します。

代わりに[self.tableView reloadData]; の後に 1 回実行します。

またはこれを試してください:

NSInteger *cells_count // You can have it from - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section.

//Run this after [tableView reloadData]
NSIndexPath* indexPath = [NSIndexPath indexPathForRow:cells_count-1 inSection:0];
[tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated: NO];
于 2012-12-10T10:09:49.047 に答える