在特定行选择上更改 UITableView 所有行的标签颜色

Posted

技术标签:

【中文标题】在特定行选择上更改 UITableView 所有行的标签颜色【英文标题】:Change UITableView all row's label color on particular row selection 【发布时间】:2017-02-02 11:16:05 【问题描述】:

我在UITableViewCell 中有一个UILabel。在最后一行选择中,我需要更改所有行的 UILabel 的文本颜色。我该怎么做?

【问题讨论】:

使用 didselectselected 行方法,只为 select 设置一个索引值,在 cellForRowAtIndexPath 中检查 bool true 或 false 并设置颜色或标签 在 didSelectRowAt 方法中检查是否是最后一行。如果是最后一个单元格,则重新加载 UITableView。然后在方法 cellForRowAtIndexPath 中更改所有单元格中 UILabel 的颜色。在重新加载 tableview 之前更新标志以知道在点击最后一个单元格后重新加载了表格。 @HimanshuMoradiya 实际上我需要反之亦然,如果用户选择最后一行恢复为实际颜色。现在,如果使用 didselectselected 行方法,我正在更改 bool 值并重新加载 tableview,这是更改所有值的颜色,但是 .. 现在 diddeselect 不起作用.. !! tableView.reloadData() 你是否在最后一行重新加载你的表格 didselectselected 方法 是的,我做到了... 【参考方案1】:
BOOL *selectlastindex;

- (void)viewDidLoad 
    [super viewDidLoad];
    selectlastindex = NO;
    // suggestionList is my NSArray (Data source)



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

    if (selectlastindex == YES) 
        if (indexPath.row == suggestionList.count - 1) 
            suggestiontitle.textColor = [UIColor blackColor];
        else
            suggestiontitle.textColor = [UIColor grayColor];
        

    else
         suggestiontitle.textColor = [UIColor blackColor];
    
    return cell;


- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    NSLog(@"click");

    if (indexPath.row == suggestionList.count - 1) 
        selectlastindex = YES;
        [self.Tableview reloadData];
    else
        selectlastindex = NO;
        [self.Tableview reloadData];
    

输出:CHECK OUTPUT

【讨论】:

谢谢.. 我会检查并告诉你。非常感谢 @Niharika 在执行之前检查我的输出是否完美? 是的。这是一样的。 @Niharika 你现在有答案了吗?【参考方案2】:

你可以设置一个像isLastRowSelected 这样的布尔值,如果用户选择最后一行然后重新加载tableView,则将其设置为true。 在cellForRowAtIndexPath: 回调上,应用条件

if isLastRowSelected 
    cell.label.textColor = UIColor.desiredColor

else 
    cell.label.textColor = UIColor.defaultColor

希望它会有所帮助:)

完整解释:

在你的类中设置一个存储的属性

var isLastRowSelected = false

然后

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
    // First add the selectedItem in your selectedItems and in the last add this
    isLastRowSelected = selectedItems.count == datasource.count 
     tableView.reloadData()


func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    if isLastRowSelected 
        cell.label.textColor = UIColor.desiredColor
    
    else 
        cell.label.textColor = UIColor.defaultColor
    

【讨论】:

她想在最后一行选择时更改所有行的文本颜色。 你在尝试多选吗? @iProgrammer 是的。 然后只添加简单的逻辑:如果您的 dataSource 计数和 selectedItems 计数相同,则将 isLastRowSelected 设置为 true,例如 isLastRowSelected = dataSource.count == selectedItems.count。让我更新 @iProgrammer 实际上我需要反之亦然,如果用户选择最后一行恢复为实际颜色。现在,如果使用 didselectselected 行方法,我正在更改 bool 值并重新加载 tableview,这是更改所有值的颜色,但是 .. 现在 diddeselect 不起作用.. !!【参考方案3】:

尝试在 willDisplayCell: 中调用您的着色代码:

- (void)tableView:(UITableView *)tableView 
  willDisplayCell:(UITableViewCell *)cell 
forRowAtIndexPath:(NSIndexPath *)indexPath 

// do your logic here:
if (selectlastindex == YES) 
        if (indexPath.row == suggestionList.count - 1) 
            suggestiontitle.textColor = [UIColor blackColor];
        else
            suggestiontitle.textColor = [UIColor grayColor];
        

    else
         suggestiontitle.textColor = [UIColor blackColor];
    

【讨论】:

以上是关于在特定行选择上更改 UITableView 所有行的标签颜色的主要内容,如果未能解决你的问题,请参考以下文章

除了部分的特定行之外,是不是可以重新加载 UITableView?

选择 UITableView 中的所有行,并在数组中附加标签

滚动 uitableview 时更改特定的 uitableviewcell 行高

如何在 ListView 中正确更改特定行的背景颜色? (安卓)

以编程方式编辑 UITableView 在所有行上显示删除按钮

更改在 UITableView 中创建的 UIButton 的图像