如何操作部分中的数组?

时间:2015-11-07 05:20:42

标签: ios objective-c uitableview

我有一个任何计数的数组。我想将不同的部分划分为7的倍数。我无法使其工作。以下是2个元素的示例。

- (void)viewDidLoad {
    [super viewDidLoad];
    array =[NSMutableArray arrayWithObjects:@"d",@"s",@"a",@"qq",@"dqd",@"dqq",@"qdqdf",@"dqdfqf", nil];

    // Do any additional setup after loading the view from its nib.
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return ceil(array.count / 2.0); // round up the floating point division
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    NSInteger sections = [self numberOfSectionsInTableView:tableView];
    if (section == sections - 1) {
        NSInteger count = array.count & 2;
        if (count == 0) {
            count = 2;
        }
        return count;
    } else {
        return 2;
    }
}

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

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

    // cell.textLabel.text = [tableData objectAtIndex:indexPath.row];
    return cell;
}

2 个答案:

答案 0 :(得分:2)

您的问题不明确,但我认为除了最后一个部分之外,每个部分都需要7行,这些部分对于其余部分中不适合其余部分的最后剩余部分而言是足够的。

假设这是正确的,您需要按如下方式正确计算部分的数量:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return ceil(array.count / 7.0); // round up the floating point division
}

现在每个部分的行数将是7,除了最后一部分可能有1-7。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    NSInteger sections = [self numberOfSectionsInTableView:tableView];
    if (section == sections - 1) {
        NSInteger count = array.count % 7;
        if (count == 0) {
            count = 7;
        }
        return count;
    } else {
        return 7;
    }
}

您还需要能够将indexPath转换为数组索引:

NSInteger index = indexPath.section * 7 + indexPath.row;

您需要能够将数组索引转换为indexPath:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:index % 7 inSection:index / 7];

或者,您可以将数据结构设置为数组数组,而不是所有这些。这实际上使您的数据更好地匹配表格的使用方式。

您修改后的问题更新:

您的cellForRowAtIndexPath方法需要更改:

//cell.textLabel.text = [tableData objectAtIndex:indexPath.row];

为:

NSInteger index = indexPath.section * 7 + indexPath.row;
cell.textLabel.text = tableData[index];

就像我上面所示。

答案 1 :(得分:1)

所以我并没有完全认同客观C,因为它已经有一段时间了。

但我想做的最简单的事情就是循环遍历数组的长度,并且每隔7天就会分割数组。

这里有一些伪代码。

for(int i =0; i<array.length<i=i+7)
{
    //take the first index, take the 7th index. 
    //split the array from the first index to the 7th
    //repeat for all remaining values.
}

我不确定你是否想要从7个区间或只有1个区间内完成所有不同的区域。如果你能澄清我可以更好地回答这个问题。