TableView的每个单元格都填充有相同的数据集

时间:2016-03-24 05:17:33

标签: ios objective-c uitableview

我有自定义单元格的uitableview。

cellForRowAtIndexPath方法中,我从核心数据中获取值并显示它。

它必须唯一地显示数据,但问题是tableview的每个单元格都显示相同的数据集。

以下是我的cellForRowAtIndexPath方法,

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    UITableViewCell *cell = nil;
    cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:@""];

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



    self.productAmountTextLabel = [[UILabel alloc]init];

    NSManagedObject *device = [self.devices objectAtIndex:indexPath.row];

    self.productAmountTextLabel.text = [device valueForKey:@"amount"];
    self.productAmountTextLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:10];


    tableView.tableFooterView = [UIView new];

    cell.layer.borderWidth = 1.0;
    cell.layer.cornerRadius = 10;
    cell.layer.borderColor = [UIColor blackColor].CGColor;



    [cell.contentView addSubview:self.productAmountTextLabel];
    return cell;
}

金额标签仅从db中获取第一个值,并显示所有单元格中的第一个值。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    UITableViewCell *cell = nil;
    cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"any-cell"];

    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                      reuseIdentifier:@"any-cell"];
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

        cell.layer.borderWidth = 1.0;
        cell.layer.cornerRadius = 10;
        cell.layer.borderColor = [UIColor blackColor].CGColor;

        UILabel* productAmountTextLabel = [[UILabel alloc]init];
        productAmountTextLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:10];
        productAmountTextLabel.frame = CGRectMake(0, 0, 100, 30); // for example
        productAmountTextLabel.tag = 10000; // any number
        [cell.contentView addSubview:productAmountTextLabel];
    }

    // tableView.tableFooterView = [UIView new];

    UILabel* lbl = (UILabel*)[cell.contentView viewWithTag: 10000];
    NSManagedObject *device = [self.devices objectAtIndex:indexPath.row];
    lbl.text = [device valueForKey:@"amount"];
    return cell;
}

- (void) makeFooter {
    myTableView.tableFooterView = [UIView new];
}

答案 1 :(得分:1)

试试此代码

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    UITableViewCell *cell = nil;
    cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"Cell"];

    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                      reuseIdentifier:@"Cell"];
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    }

    NSManagedObject *device = [self.devices objectAtIndex:indexPath.row];

    cell.textLabel.text = [device valueForKey:@"amount"];
    cell.textLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:10];

    cell.layer.borderWidth = 1.0;
    cell.layer.cornerRadius = 10;
    cell.layer.borderColor = [UIColor blackColor].CGColor;

    return cell;
}

问题可能出在您正在使用的全局UILabel上。如果要在标签中进行任何自定义,请创建自定义UITableViewCell类并在其中声明标签。在声明单元格

时使用您的类而不是UITableViewCell

答案 2 :(得分:1)

当你在返回行和节的值

时出错时,通常会出现此问题

检查此代码

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.devices count];

} 

可能你已经返回了反之亦然的值