0

UItable に入力しているオブジェクトの配列があります。各オブジェクトの属性の 1 つは YES/NO 値です

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {を使用して、次のようにテーブルにデータを入力します。

私のコードは、配列内の各オブジェクトのテーブル エントリを作成します。「display」属性が YES に設定されている配列内のオブジェクトを使用して、テーブルにのみデータを入力したいですか? どうすればいいですか?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellidentifier = @"customcell";
customcell *cell = (customcell *)[tableView dequeueReusableCellWithIdentifier:
                                  cellidentifier];

my_details *myObj = [appDelegate.myArray objectAtIndex:indexPath.row];

// UITableViewCell cell needs creating for this UITableView row.
if (cell == nil)

{
    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"customcell" owner:self options:nil];

    for (id currentObject in topLevelObjects) {
        if ([currentObject isKindOfClass:[customcell class]]) {
            cell = (customcell *) currentObject;
            break;
        }
    }
}


    cell.line1.text = myObj.line1;
    cell.line2.text = myObj.line2;
    cell.line3.text = myObj.line3;


return cell;
}
4

2 に答える 2

0

オブジェクトをテーブルに送信して表示する前に、オブジェクトをフィルタリングすることをお勧めします。

NSPredicate を使用してオブジェクトの配列をフィルター処理できます。オブジェクトの状態が変化すると、表示属性が yes に設定され、配列を再フィルター処理してテーブルビューに渡します。

NSPredicate *testForTrue = [NSPredicate predicateWithFormat:@"display == YES"];
NSArray *filteredArray = [myObjectsArray filteredArrayUsingPredicate:testForTrue];

filteredArray を取得したら、それを tableView に渡し、更新するためにデータをリロードするように指示する必要があります。

于 2012-05-08T22:23:13.273 に答える
0

@Sorin が示すように、テーブルをフィルタリングする必要があります。これは、表への挿入前または挿入中に行うことができます。どちらが好みの問題か (および、プログラミングで通常従うガイドラインはどれか)

a) すべてのデータを持つ前 -> フィルタ -> 縮小されたセットを持つ -> 縮小されたテーブルを表示する

b) すべてのデータを持っている間 -> #items を数える -> 行に導入する -> テーブルを表示する そのためには、numberOfRowsInSection を適応させる必要があります (疑似コード!)

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  counter=0;
  for each in table
     if value = YES counter++
  return counter;
}

cellForRowAtIndexPath では、グローバル変数を使用して、挿入する次の行を追跡する必要があります: (疑似コード!)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell;
    static NSString *CellIdentifier = @"Cell";
    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    rowcounter++;
    cell.textLabel.text=[selectionTableArray objectAtIndex:rowcounter];
    return cell;
}
于 2013-10-02T12:04:15.903 に答える