0

テーブルビューとデータソース(コアデータ)を備えたアプリを作成しています。この表では、日付順に並べられたいくつかのタスクをグループ化しており、このセグメント化されたコントロールがあります。テーブルに今日の日付以降のタスクのみをロードしたいのですが、ユーザーが2番目のセグメントをタップすると、すべてのタスクが表示されます。最初のセグメントをタップした場合、テーブルはそれ以降の日付のタスクのみを再度表示する必要があります。

問題は:

1-管理対象オブジェクトを取得するために、indexPathに関連付けられたfetchedResultsControllerを使用しています。

2-insertRowsAtIndexPaths:withRowAnimation:メソッドとdeleteRowsAtIndexPaths:withRowAnimation:メソッドを使用して、セルを表示および非表示にします。そして、これは私のindexPathsを台無しにします。特定の行の詳細ビューに移動したい場合は、行を削除した後、別のindexPathに関連付けられます。

この問題は私が行った方法で修正されましたが、indexPathsとcellsの他の問題がまだあり、修正するたびに問題が発生しなくなったようです。

それを行う簡単な方法はありますか?

削除する代わりにセルを非表示にしようとしましたが、問題なく機能しますが、これらのセルを非表示にして非表示のセルを空白スペースに占有させる方法がある場合は、非表示のセルの代わりに空白スペースがありました。それが最も簡単な方法だと思います。

誰でも私を助けることができますか?

4

2 に答える 2

1

セルが非表示になるときはセルの高さを0に設定し、表示されるときは高さを元の値に戻します。

TableViewController.h

@interface TableViewController{
CGFloat cellHeight;
}

TableViewController.m

- (void)cellHeightChange{
//if you need hide the cell then
cellHeight = 0;
cellNeedHide.hidden = YES;
//if you need hide the cell then
cellHeight = 44; // 44 is an example
cellNeedHide.hidden = NO;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
{
    switch (section) {
    // for example section 0 , row 0 is the cell you wanna hide.
    case 0:
        switch (row) {
            case 0:
            return cellHeight;
        }
    }
}
于 2012-05-26T13:51:56.367 に答える
1

ユーザーがセグメントをタップすると、管理対象オブジェクトに対して新しいフェッチリクエストを実行して、適切な配列(すべての日付の配列、またはそれ以上の日付)を提供します。次にreloadData、データソースでこの新しい配列を使用してtableViewで使用します。

また

高さ0を非表示にするセルを指定しますか?

于 2012-05-26T13:58:47.033 に答える