如何在运行时以编程方式更改UITableViewCells文本颜色

时间:2016-07-06 18:59:40

标签: ios objective-c uitableview

我想启用一个"黑暗模式"功能到我的应用程序和我的tableview单元格中,我改变了这样的文本颜色

    if ([FS isDarkModeEnabled]) {
        cell.CATEGORY.textColor = [UIColor whiteColor];
        cell.ORIGINUSER.textColor = [UIColor whiteColor];
        cell.NUMFILES.textColor = [UIColor whiteColor];
        cell.NUMTASKS.textColor = [UIColor whiteColor];
        cell.SHARECOUNT.textColor = [UIColor whiteColor];
    } 

我想我用for循环替换上面的代码但是

for (id obj in [cell.contentView subviews]) {
    if ([obj isKindOfClass:[UILabel class]]) {
        NSLog(@"%@", ((UILabel *)obj).text);//<-- this spits out my storyboard placeholder text and not the acutal text for some reason.
        [((UILabel *)obj) setTextColor:[UIColor greenColor]];
    }
}

FSCategoriesTVCCell *cell2 = [self.tableView cellForRowAtIndexPath:indexPath];
for (UILabel *lbl in [cell2.contentView subviews]) {
    [lbl setTextColor:[UIColor greenColor]];
} 

但我无法让它发挥作用。

以上所有代码均在- tableView:cellForRowAtIndexPath:

中完成

编辑以添加一些说明

我知道如何手动更改文本颜色,我想要做的是循环遍历单元格的内容并通过for循环更改颜色,而不是通过声明每个标签并单独更改每个标签。

或者,简而言之,我想要一个for循环,而不是cell.Label1.textColor = blah

2 个答案:

答案 0 :(得分:3)

当用户启用黑暗模式时,您必须通知tableview它应该更新单元格。要执行此操作,只需调用tableView的[tableView reloadData]方法。

答案 1 :(得分:0)

选项1:查看加载时

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
  static NSString *CellIdentifier = @"Cell";

  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  if (cell == nil) 
  {
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
  }
  cell.textLabel.textColor = [UIColor blueColor];
  cell.textLabel.text = @"highboi";
  return cell;
}

选项2:单击或选择tableView

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
   [tableView cellForRowAtIndexPath:indexPath].textLabel.textColor = [UIColor redColor];
}