0

提供された reorderControls を使用すると、ユーザーはセルをタップ アンド ホールドしてドラッグし、並べ替えることができます。ドラッグするために選択されたセルとその現在のセルの位置を知るにはどうすればよいですか (つまり、他のセルがアニメーション化してフローティング セル用のスペースを作る場合、移動したセルのインデックスが必要です)。

私がやろうとしているのは、ユーザーが現在のセルを画面外のセルで並べ替えたい場合に、画面外のセルが画面上でスクロールされるようにビューをスクロールすることです。私のセットアップは次のとおりであるため、組み込みの動作を使用できません。

UIScrollView (親)

  • UITableView (子)

また、UITableView フレームはその contentSize のフル サイズです (スクロールしません)。UITableView で並べ替えるには、ユーザーがセルをドラッグしている場所に対して外側の UIScrollView をスクロールする必要があります。

デリゲート関数とデータソース関数を調べてみましたが、今のところうまくいきません。グーグルとアップルのドキュメントも試してみました...

編集:ドキュメントが読めないようです。tableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath:デリゲートプロトコルでは、必要なものが得られます。

解決策: tableview から scrollview のコントローラーへのデリゲートを作成します (私の tableview は独自のデリゲートです)。提案されたインデックス パス関数では、デリゲートに、表示される必要がある、proposedDestinationIndexPath の近くのセルを送信しました。indexpath が 0 または最大値の場合、これはそのセル自体である可能性があります。次に、デリゲートで [view convertPoint:FromView:] 関数を使用してそのセルの位置を計算し、スクロールビューのコンテンツ オフセットを設定してセルを表示します。ありがとう

4

1 に答える 1

0

通常、セルをドラッグすると、上または下に到達するとテーブル ビューが自動的にスクロールします。テーブルビューはスクロールできないほど大きいと考えているため、スクロールビューを使用すると正しく機能しなくなっているようです。必要な答えが得られる通常の API 呼び出しはありません。

私が考えることができる唯一のことは、tableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath:テーブル ビュー デリゲート メソッドの実装です。

これproposedIndexPathにより、ユーザーが現在行をドラッグしている場所の大まかなアイデアが得られる場合があります。その indexPath を使用して、テーブルにCGRectパスを問い合わせることができます。次に、それをスクロール ビューのコンテンツ ビュー内の位置に変換します。

ただし、これは完璧にはほど遠いです。

別の可能性として、移動するセルのframeまたはプロパティにオブザーバーを追加することもできます。center

于 2012-11-05T22:55:04.333 に答える