スタックオーバーフロー(Getting row of UITableView cell on button press)を検索し、人々が動作すると主張する多くのソリューションを見つけましたが、まだ完璧なソリューションを見つけていません。私はそれをスクロールして最初のレスポンダにするために、CGITを使ってUITableView内の次の/前のUITextFieldのindexPathを取得しようとしています。しかし、私のテキストフィールドが別のセクションのUITableViewの前のフィールドの高さである場合は、大抵の場合は間違った結果が得られます。ここでUITableView内の次/前のUITextFieldのインデックスパス
は、コードは(:nextTxtFieldはUIViewのであることに注意してください):ある
CGPoint point = [nextTxtField convertPoint:CGPointZero toView:tableView];
NSIndexPath *indexPath = [tableView indexPathForRowAtPoint:point];
[UIView animateWithDuration:0.03 delay:0.0 options:0 animations:^{
[tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:NO];
} completion:^(BOOL finished) {
dispatch_async(dispatch_get_main_queue(), ^(void){
[nextTxtField becomeFirstResponder];
});
}];
テーブルビューとuitextフィールドのみが与えられている場合は、indexPathを取得する必要があります。これは、特にUITableViewCellがビューから外れている場合には機能しません。cellForRowAtIndexPathは、セルの再利用のためにnilを返します。 – HawkEye1194
uitableviewcellに含まれている再利用識別子を持つuitextfieldインスタンスはどのように指定されていますか?どのようにあなたはuitextfieldをつかむのですか? –
申し訳ありません私は細胞の再利用をしません。私がしなければならなかったので、私はセルを割り当てます、私のテーブルはそれほど大きくはありません。だから私は配列内のコントロールへの参照があります。 – HawkEye1194