iOS の長いフォームに問題があります。フォーム自体は、静的なテーブル ビューで行われます。フォームには、前/次と完了のツールバーが必要でした。このプロジェクトではBSKeyboardControlsを追加しましたが、別のプロジェクトですでに自分で行っています。
次または前の textField/textView が見えない場合を除いて、ツールバーは正常に機能します。その後、以前の textField のフォーカスは変更されず、このテキスト フィールドにまだ入力しています。手動でスクロールして、対象の次のテキストフィールドが表示されると、魔法のようにファーストレスポンダになります。もちろん、これは期待される動作ではありません。
そのため、最初のレスポンダーとして設定する前に、テーブル ビューをそれぞれのフィールドにスクロールする必要があることがわかりました。しかし、私はこれを成し遂げることができません。
私はindexPathesでこれを試みました
NSIndexPath *path = [self.tableView indexPathForCell:(UITableViewCell *)textField.superview.superview];
[self.tableView scrollToRowAtIndexPat:path atScrollPosition:UITableViewScrollPositionTop animated:YES];
スーパースーパービューは有効な (そして正しい) テーブル セルですが、返されるパスは nil です。バリエーションも試してみました
CGPoint point = [self.tableView convertPoint:textField.frame.origin toView:self.tableView];
NSIndexPath *path = [self.tableView indexPathForRowAtPoint:point];
rects と indexPathsForRowsInRect を使用したその他のバリエーション。
唯一の方法は、textFields セルの indexPaths を手動で追跡することですが、この場合、それは適切な解決策ではありません。
tableView で見えない textField へのスクロールを実現する方法を知っている人はいますか?
編集:
ジャスティン・ポールソンがkeyboardControlsPreviousNextPressedのコードを要求したように:
- (void)keyboardControlsPreviousNextPressed:(BSKeyboardControls *)controls withDirection:(KeyboardControlsDirection)direction andActiveTextField:(id)textField
{
NSIndexPath *path = [self.tableView indexPathForCell:(UITableViewCell *)((UIView *)textField).superview.superview];
NSLog(@"path %@ for cell %@", path, ((UIView *)textField).superview.superview);
[self.tableView scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionTop animated:YES];
[textField becomeFirstResponder];
}
ログの出力によると、パスはゼロですが、スーパースーパービューは右側のテーブル ビュー セルです。