我有UITableView
由多个自定义UITableViewCells
组成。
当表didSelectRowAtIndexPath
方法触发时,如果indexPath.row
等于2,我想在此行的单元格内更新UILabel
。
我的想法是使用以下几行内容;
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if(indexPath.row == 2){
myCustomCellView *cell = [self.essentialsTableView cellForRowAtIndexPath:indexPath];
cell.myUILabel.text = @"my text";
[tableView reloadData];
}
}
这里的问题是cellForRowAtIndexPath
返回UITableViewCell
类型的对象,而不是myCustomCellView
。
有人可以建议我如何在didSelectRowAtIndexPath
方法中访问和更新单元格的属性吗?
答案 0 :(得分:0)
定义一个Bool值,说“secondRowIsClicked”。在viewWillApper
或viewDidAppear
功能中将其设置为否。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.row == 2)
{
secondRowIsClicked = YES;
[tableView reloadData];
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// Your code
if (secondRowIsClicked == YES)
{
cell.myUILabel.text = @"my text";
}
}
答案 1 :(得分:0)
尝试使用以下代码..
myCustomCellView *cell = (myCustomCellView *) [self.essentialsTableView cellForRowAtIndexPath:indexPath];
您可以使用UITableViewCell
重新加载indexPath
,如下所示..
[self.tableView reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone];
答案 2 :(得分:0)
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
myCustomCellView *cell = [self.essentialsTableView cellForRowAtIndexPath:indexPath];
UILabel *yourLabel=[cell.contentViews.subviews viewWithTag:indexPath.row+1];
//do whatever you want with your label;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// Your code
cell.myUILabel.text = @"my text";
cell.myUILabel.tag=indexpath.row+1;
}
答案 3 :(得分:0)
对您的自定义单元格进行类型转换UITableViewCell
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if(indexPath.row == 2){
myCustomCellView *cell = (myCustomCellView *)[self.essentialsTableView cellForRowAtIndexPath:indexPath];
cell.myUILabel.text = @"my text";
[tableView reloadData];
}
}
答案 4 :(得分:0)
您需要更新数据源,然后调用重新加载tableview
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.row == 2){
//update the array which is used as the data provider in cell for row at index path.
[tableView reloadData];
}
}
答案 5 :(得分:0)
myCustomCellView
是UITableViewCell
的子类。
所以只需打印单元格
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if(indexPath.row == 2){
myCustomCellView *cell = (myCustomCellView *)[self.essentialsTableView cellForRowAtIndexPath:indexPath];
cell.myUILabel.text = @"my text";
[tableView reloadData];
}
}
更多信息:
根据Apple编码指南,用户类名称不以小写字母开头
而不是myCustomCellView
使用MyCustomCellView