1

固定行数 (7) の tableView があります。各行は、ラベル + textField で構成されます。

テキストファイルに触れると、仮想キーボードが表示され、ポップオーバーのサイズが変更され、新しいサイズで 7 行のうち 4 行だけが表示されます。私がやりたいことは、ユーザーが新しいテキストフィールドに触れるたびに、テーブルビューがそれを含むセルにスクロールすることです。

私はもう試した

- (void)textFieldDidBeginEditing:(UITextField *)textField{
    CGPoint point = [textField.superview convertPoint:textField.frame.origin toView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:point];
    NSLog(@"Row %d section %d", indexPath.row, indexPath.section);
    [tableView reloadData];
    [tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:NO];
}

そしてまた

- (void)textFieldDidBeginEditing:(UITextField *)textField{
    CGPoint point = [textField.superview convertPoint:textField.frame.origin toView:self.tableView];
    CGPoint contentOffset = tableView.contentOffset;
    contentOffset.y += (point.y - self.navigationController.navigationBar.frame.size.height); // Adjust this value as you need
    [tableView setContentOffset:contentOffset animated:YES];
}

しかし、どれも機能しません。メソッドが呼び出されています (デリゲートを設定しています)。仮想キーボードによるサイズ変更が原因で機能しないことは確かですが、誰がそれを解決できたのかわかりません。

何か助けはありますか?どうもありがとう

4

1 に答える 1

1

以下は完全に機能します。

- (void)textFieldDidEndEditing:(UITextField *)textField {

    //  Find the cell displaying this textField and scroll it into the middle of the tableView
    UITableViewCell *cell = (UITableViewCell *)[[textField superview] superview];
    NSIndexPath *cellPath = [self.tableView indexPathForCell:cell];
    [self.tableView scrollToRowAtIndexPath:cellPath atScrollPosition:UITableViewScrollPositionMiddle animated:YES];
}
于 2013-05-03T21:00:58.663 に答える