0

アクション行を表示する行スワイプのような スズメを実装しようとしていました (私の出発点はこのコードでした)。

作成する行ごとに..親行を参照する「backView」UITableViewCellも作成します..たとえば、backViewで削除をクリックすると..どのメールを削除するかがわかります.

iOS の組み込み編集モード delete を使用する代わりに、backView にボタンを作成し、それにイベント ハンドラーをアタッチしました。親セルは背面ビューのデリゲートであり、背面ビューは削除タスクを親セルに渡します。

イベント ハンドラー メソッドに reloadData を追加しないという Appleの指示に従いました。しかし、その後、すべてが台無しになりました..行を削除しても、削除されなかったり、間違った順序で削除されたりするなど..削除するたびに親メニューに戻っただけであることに気付きました..物事完全に機能しました..そして、この回避策(つまり、総当たりでreloadDataを使用)を使用すると、すべてが完全に機能しました。

私の質問は(長い導入で申し訳ありません) 挿入/削除メソッドで reloadData を使用しないように求められるのはなぜですか? または、この命令は、行を削除する編集モードの方法を使用する場合にのみ適用されますか? Apple はそれについてはっきりとはわかっていません。

4

3 に答える 3

1

これを試して :

  • 削除ボタンに indexPath.row のタグを付けます
  • 次に、削除ボタン IBAction で

セクションが 1 つしかない場合

-(IBAction)deleteBtn:(id)Sender
{
    UIButton *delBtn = (UIButton *)sender;

    [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:delBtn.tag inSection:0]] withRowAnimation:UITableViewRowAnimationLeft];

}

これにより、indexPath の行のみが削除され、その行のみが再ロードされます。

于 2012-12-24T08:57:07.660 に答える
0

reloadDataは、アニメーションをバイパスしてテーブルを完全に再構築します。行を削除または挿入する場合は、beginUpdatesを使用してください。説明は次のとおりです。

-(void)beginUpdatesレシーバーの行とセクションを挿入、削除、または選択する一連のメソッド呼び出しを開始します。後続の挿入、削除、および選択操作(たとえば、cellForRowAtIndexPath:およびindexPathsForVisibleRows)を同時にアニメーション化する場合は、このメソッドを呼び出します。このメソッドのグループは、endUpdatesの呼び出しで終了する必要があります。これらのメソッドペアはネストできます。このブロック内で挿入、削除、および選択の呼び出しを行わないと、行数などのテーブル属性が無効になる可能性があります。グループ内でreloadDataを呼び出さないでください。グループ内でこのメソッドを呼び出す場合は、アニメーションを自分で実行する必要があります。

于 2012-12-24T08:13:14.667 に答える
0

はすべてのデータをリロードするため- [UITableView reloadData]、基本的に UI への一時的で非永続的な変更を無効にします。これらの変更をデータ構造に反映するか、Apple のデフォルトの方法に固執する方が一般的に良いと思います (ロジックではなくグラフィックのみを変更してみてください)。

于 2012-12-27T09:23:32.760 に答える