0

我有一个对象数组,我在 UItable 中填充了每个对象的属性之一是 YES/NO 值

我使用 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 来填充我的表格,如下所示。

我的代码为数组中的每个对象创建一个表条目。我只想使用数组中“显示”属性设置为“是”的对象来填充表格?我该怎么做呢?

- (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,重新过滤数组并将其传递给 tableview。

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

获得过滤数组后,您需要将其传递给 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 回答