【问题标题】:Editing UITableViewCell by tag按标签编辑 UITableViewCell
【发布时间】:2014-03-20 16:07:27
【问题描述】:

我一直在尝试为一些我认为不应该那么困难的事情找到一个简单的答案,但我要么找不到合适的答案,要么无法理解它。

我正在尝试更改/编辑一个特定表格视图单元格的文本标签内容。因此,为了举例,我希望在 UITableView 之外但在同一个视图控制器中使用 UIButton 来更改第 2 行中的文本,同时保持其他文本相同。

我知道您使用viewWithTag,但除此之外我无法弄清楚!请帮忙....

这是我目前的代码

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

    EntryCell *cell = (EntryCell *)[contentTable dequeueReusableCellWithIdentifier:@"Cell"];

    cell.mainLabel.tag = indexPath.row;
    cell.mainLabel.text = @"hello";

    return cell;

}

-(void)buttonPressed:(UIButton *)button {
    cell.mainLabel = (UILabel *)[contentTable viewWithTag:2];
    cell.mainLabel.text = @"goodbye";

}

【问题讨论】:

    标签: ios objective-c uitableview tags


    【解决方案1】:

    不要使用viewWithTag,使用下面来获取对单元格的引用

    -(void)buttonPressed:(UIButton *)button 
    {
        EntryCell *cell = (EntryCell *)[tblView cellForRowAtIndexPath: [NSIndexPath indexPathForRow:2 inSection:0]];
        if(cell != nil)
        {
            cell.mainLabel.text = @"goodbye";
        }
    }
    

    编辑

    正如大卫指出的那样,如果单元格不可见,这将被覆盖,因为cellForRowAtIndexPath: 将在它变得可见时再次被调用。用您指定的任何内容覆盖此更改。

    您需要在此之后更新您的数据模型,以便更改是永久性的

    【讨论】:

    • 请注意,这仅在从 cellForRowAtIndexPath 请求的单元格当前可见时才有效。
    • 问题不仅在于它会被覆盖。 cellForRowAtIndexPath:为当前不可见的单元格返回 nil。
    • @David 啊,是的,那么编辑就可以了,应该为不可见的行更新数据模型,因为它将在cellFOrRowAtIndexPath 中“更新”,我会添加一个 nil 检查
    • 非常感谢!就这么简单。它与默认的 textLabel 一起使用,但我正在努力让它与我的自定义单元格文本一起使用。
    • 确实如此,尽管那时我的方法是更新模型,然后使用 reloadRows 使单元格无效。我讨厌在多个地方使用相同的代码:)
    猜你喜欢
    • 1970-01-01
    • 2016-12-26
    • 2012-09-02
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    相关资源
    最近更新 更多