2009-08-11 5 views
0

カテゴリプロパティ(task.category)を持つオブジェクトのクラスがあります。これは整数値(1,2または3)に設定されています。 taskを適切なセクションに配置することで、グループ化されたテーブルを構築したいと考えています。グループ化された表の特定のセクションにセルを入れる方法は?

グループ化されたテーブルの特定のセクションに、そのプロパティの1つに基づいて特定のセルオブジェクトを描画する方法?

ありがとうございます! :)

答えて

2

これを自動的に行う方法はありません。あなたはまだUITableViewDataSourceのすべての必要なメソッドを実装する必要があります。データソースメソッドが正しいデータを提供するためには、まずタスクをカテゴリ別にグループ化して適切なデータ構造を構築する必要があります。最も簡単な方法は、(NSNumberでラップされた)カテゴリをキーとしてNSDictionaryを構築し、対応するタスクのNSArrayを値として構築することです。

は、この辞書を構築(テストしていません)このような何かをするには、次の

NSArray* keys = [NSArray arrayWithObjects:[NSNumber numberWithInteger:1], [NSNumber numberWithInteger:2], [NSNumber numberWithInteger:3], nil]; 
NSArray* objects = [NSArray arrayWithObjects:[NSMutableArray array], [NSMutableArray array], [NSMutableArray array], nil]; 
self.dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys]; 

for(Task* task in tasks) { // if tasks is your array holding all tasks 
    NSNumber* bucket = [NSNumber numberWithInteger:task.category]; 
    [[dict objectForKey:bucket] addObject:task]; 
} 

我々はこのNSNumber定型をしなければならない理由は、あなたがプリミティブ値を使用できないことです(。たとえば、整数)辞書キーとして使用します。

ます(以下のコードでself.dict)この辞書を持っていたら、ちょうど必要UITableViewDataSourceメソッドを実装:もちろん

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 3; // supposing you have 3 categories 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    NSArray* tasks = [self.dict objectForKey:[NSNumber numberWithInteger:(section + 1)]]; 
    return [tasks count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSArray* tasks = [self.dict objectForKey:[NSNumber numberWithInteger:(indexPath.section + 1)]]; 
    Task* task = [tasks objectAtIndex:indexPath.row]; 

    // other stuff usually done here (create cell, set content of cell etc.) 
} 

が、これはただ一つの可能​​なアプローチですが、私はそれがあなたを取得するのに役立ちます願っています正しいトラック。

+0

これは素晴らしいですね。たぶん私が必要としている正確に、ありがとう。私は正しいタスクオブジェクトを正しい配列に取得する方法を理解できません。擬似コードでは、私はしたい: '各タスクオブジェクトの場合、カテゴリ1の配列に追加する場合は、task.category == 1'。 – Triz

+0

私はちょうど私の答えを更新し、辞書を構築するためのいくつかのサンプルコードを追加しました。おそらく、これを行うのが一番良い方法ではないかもしれませんが、うまくいくはずです。 –

+0

ああ、素晴らしい。はい。簡単な質問: 'self.dict'はまだ存在しません...それはどこから来たのですか? – Triz

関連する問題