两个NSMutableArrays在一个UITableView中,在iOS中有自定义单元格

时间:2014-06-17 13:47:38

标签: ios objective-c uitableview nsmutablearray

在我的iOS应用中,我有两个 NSMutableArray

@implementation MyViewController {
    NSMutableArray *arrOne;
    NSMutableArray *arrTwo;
}

在我的实施文件中声明,一个 UITableView

@property (strong, nonatomic) IBOutlet UITableView *tableView;

MyController.h

中声明

我想要的是将这些数组内容加载到同一个表中,其中首先是 arrOne 内容,然后是 arrTwo

以下是我获取表行数的方式

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{   
    if ([arrOne count] > 0 && [arrTwo count] > 0) {
        return [arrOne count] + [arrTwo count];
    } else if ([arrTwo count] > 0) {
        return [arrTwo count];
    } else {
        return 10;
    }
}

以下是我尝试创建表格单元格的地方

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"myTable";

    if ([arrOne count] > 0 && [arrOne count] > indexPath.row) {

        UITableViewCell *defaultCell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

        if (defaultCell == nil) {
            defaultCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
        }       
        return defaultCell;

    } else {

        MyTableViewCell *cell = (MyTableViewCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

        if (cell == nil)
        {
            NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MyTableCell" owner:self options:nil];
            cell = [nib objectAtIndex:0];
        }
        return cell;
    }
}

使用上面的代码,假设 arrOne 只有一个元素, tableView 应该显示第一个单元格white,所有其他单元格显示我的自定义单元格。相反,它显示,第一个细胞白色如预期的那样,中间的一些细胞(5,9,13 ......)也是白色的。无法确定原因。知道为什么吗?

如果这不是在单个表视图中实现两个数组的正确方法,它是什么?

1 个答案:

答案 0 :(得分:0)

如果arrOne只包含一个元素(正如您所说)并且arrTwo为空,那么根据numberOfRowsInSection,您将拥有10个总单元格。第一个单元格将是UITableViewCellStyleDefault单元格,接下来的9个单元格应为MyTableViewCell单元格。

您看到多个UITableViewCellStyleDefault单元格的原因是因为您使用的是相同的单元格标识符。在每个if / else语句中移动您的ID声明,并为每个单元格类型使用不同的标识符。

if ([arrOne count] > 0 && [arrOne count] > indexPath.row) {
    static NSString *defaultTableIdentifier = @"defaultReuse";
    UITableViewCell *defaultCell = [tableView dequeueReusableCellWithIdentifier:defaultTableIdentifier];

    if (defaultCell == nil) {
        defaultCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:defaultTableIdentifier];
    }       
    return defaultCell;

} else {
    static NSString *simpleTableIdentifier = @"myCustomCellReuse";
    MyTableViewCell *cell = (MyTableViewCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MyTableCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }
    return cell;
}

(另外,您的Nib名称是否与类名不同?MyTableViewCell vs MyTableCell。因为您声明了类MyTableViewCell的单元格,然后加载名为{{1的nib }}。)