0

Core Data と NSFetchedResults コントローラーを使用して、アプリに UITableViewCell (プレーン スタイル) を設定しています。TableView には 3 つのセクションがあり、それぞれに viewForHeaderInSection と viewForFooterInSection があります。ユーザーは、各セクションに配置されるアイテムを入力します。

セクションの 1 つにアイテムが含まれていない場合、そのセクションは完全に消えます。セクションが空の場合、「エントリなし」などの新しいセルが表示されるようにすることが可能かどうか疑問に思っています(おそらくUIImageViewまたは別のビューで?)。新しいアイテムがそのセクションに入れられた場合は消えます。

これを達成する方法を知っている人はいますか?

これが私のデータソースのコードです。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return [[self.fetchedResultsController sections] count];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{    
   return [[[self.fetchedResultsController sections] objectAtIndex:section] numberOfObjects];
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    return [[[self.fetchedResultsController sections] objectAtIndex:section] name];
}

また、行がない場合、セクション自体がTableViewから削除されるため、「エントリなし」セルが正しいセクションに追加されるようにするにはどうすればよいですか?

4

2 に答える 2

1

セクションがテーブルビューに表示されない場合、セクションが3つあると言っていても、フェッチ結果からは返されません。次の方法で手動で返品できます。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 3;
}

それで

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{    
   if  ([[[self.fetchedResultsController sections] objectAtIndex:section] numberOfObjects] == 0){     
       return 1;
   } else {
       return [[[self.fetchedResultsController sections] objectAtIndex:section] numberOfObjects];
   }
}

空のcellForRowAtIndexPath:テストで。

if ([[[self.fetchedResultsController sections] objectAtIndex:section] numberOfObjects] == 0){
cell.textLabel = @"No Entries";

}

ただのアイデア。

編集:フェッチによって返されないインデックスをキャッチしようとすると、アプリがクラッシュする可能性があることに注意してください。

于 2012-07-20T18:07:20.107 に答える
0

関数を変更してnumberOfRowsInSection、そのセクションに実際の行がないかどうかを確認し、そうである場合は (0 ではなく) 1 を返す必要があります。

次に、cellForRowAtIndexPathそのセクションのデータがあるかどうかを確認し、ない場合は「エントリなし」セルを作成します。

于 2012-07-20T18:06:38.343 に答える