我的问题需要一些帮助。我见过很多类似的帖子,并尝试过解决方案,但没有一个对我有用。
我有一个自定义UITableViewCell
,其中我有多个UILabel
和一个UIButton
控件。此控件用于更新其单元格中的一个标签。但是,它不会更新正确的UILabel
,而是更新最后一个单元格中的UILabel
。
我的代码:
- (UITableViewCell *)tableView:(UITableView *)inTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSInteger ETag = 111;
static NSInteger STag = 112;
.... // code
if (cell == nil) {
.... // code
frame.origin.x = 85;
frame.origin.y = 10;
frame.size.height = 50;
frame.size.width = 100;
SLabel = [[UILabel alloc] initWithFrame:frame];
SLabel.tag = STag;
[cell.backgroundView addSubview:SLabel];
//[SLabel release];
frame.origin.x = 215;
frame.origin.y = 10;
frame.size.height = 50;
frame.size.width = 100;
ELabel = [[UILabel alloc] initWithFrame:frame];
ELabel.tag = ETag;
[cell.backgroundView addSubview:ELabel];
//[ELabel release];
.... // code
}
.... // code
ELabel = (UILabel *) [cell.backgroundView viewWithTag:ETag];
SLabel = (UILabel *) [cell.backgroundView viewWithTag:STag];
ELabel.text = [s._episode stringValue];
ELabel.backgroundColor = [UIColor clearColor];
ELabel.textColor = [UIColor whiteColor];
ELabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:20];
ELabel.textAlignment = UITextAlignmentLeft;
ELabel.tag = 1000+indexPath.row;
SLabel.text = [s._season stringValue];
SLabel.backgroundColor = [UIColor clearColor];
SLabel.textColor = [UIColor whiteColor];
SLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:20];
SLabel.textAlignment = UITextAlignmentLeft;
SLabel.tag = 1000+indexPath.row;
..... // code
return cell;
}
感谢您的阅读和帮助。
托米
谢谢!我解决了我的问题:
UITableViewCell *cell = (UITableViewCell *)[tableView cellForRowAtIndexPath:indexPath];
UILabel *a = (UILabel *) [cell viewWithTag:(1000+indexPath.row)];
a.text = [NSString stringWithFormat:@"%@", @"something"];
问题是标签不是唯一的
答案 0 :(得分:2)
如果您的UILabel
中的tag
在您的视图中是唯一的,则可以访问该UITableView
。
例如,您有UILabel
个多个单元格。每个单元格包含可能已更新的indexPath.row
。让我们为这些标签设置唯一标记,让它们成为UITableViewCell
的{{1}}(已经在您的代码中完成)。
然后,当您想要使用tag == cellsTagToUpdate
更新某个单元格时,您应该通过调用UITableView *tableView
:UILabel *labelToUpdate = [tableView viewWithTag:cellsTagToUpdate]
来获取对该单元格的引用。
现在您已经引用了要更新的标签。在更新之前,您应该检查cell
是否为零。如果该视图(UILabel
)现在不可见并且已从superview
中移除,则为零。
答案 1 :(得分:0)
嗯,您始终可以使用UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
获取对您单元格的引用,然后使用viewWithTag获取单元格内的UILabel并设置所需标签的文本。
答案 2 :(得分:0)
您要做的第一件事是从indexPath
UITableViewDelegate
选择器获取tableView: didSelectRowAtIndexPath:
并以某种方式存储它(属性就足够了)。
然后在您的按钮选择器中可以调用cellForRowAtIndexPath:
对于与所选indexPath
相对应的单元格,以便更新其UILabel
的任何文本,现在:
ELabel = (UILabel *) [cell.backgroundView viewWithTag:ETag];
SLabel = (UILabel *) [cell.backgroundView viewWithTag:STag];
答案 3 :(得分:-2)
编辑:见Nektos回答
然而,他布局和设置数据的方式不是你应该怎么做的。他可以通过IB进行布局并应用标准模式:http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/TableView_iPhone/CreateConfigureTableView/CreateConfigureTableView.html#//apple_ref/doc/uid/TP40007451-CH6-SW10