如何在didSelectRowAt索引上更新自定义UITableViewCell的属性?

时间:2013-04-22 11:07:11

标签: iphone ios uitableview

我有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方法中访问和更新单元格的属性吗?

6 个答案:

答案 0 :(得分:0)

定义一个Bool值,说“secondRowIsClicked”。在viewWillApperviewDidAppear功能中将其设置为否。

- (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)

myCustomCellViewUITableViewCell的子类。 所以只需打印单元格

-(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