我有自定义单元格的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中获取第一个值,并显示所有单元格中的第一个值。我该如何解决这个问题?
答案 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];
}
可能你已经返回了反之亦然的值