如何检查 table 视图单元格字幕是否彼此相等 iOS

How to check if table view cells subtitles are equal to each other iOS

我想知道是否有办法检查一个单元格的 detailTextLabel.text 是否等于另一个单元格的 detailTextLabel.text。

原因是如果单元格文本彼此相同,我想将 detailTextLabel.textColor 设置为相同的颜色。

例如,如果有多个单元格具有相同的副标题 - 假设我有三个单元格的副标题是比萨饼 - 我想将比萨饼的颜色设置为绿色。

我担心添加我的代码可能会使事情变得更加混乱,因为我根据用户的搜索文本从核心数据中提取副标题(还有很多事情要做,因为我还坚持从数据源获取核心数据).所以字幕本身在某种程度上是随机的。我的应用程序实质上允许用户根据类别搜索兴趣点。因此,如果用户搜索比萨饼,地图视图将显示所有供应比萨饼的当地餐馆。然后,您可以保存该特定兴趣点,并将副标题设置为披萨(或用户搜索的任何内容)。因此可以有多个条目带有比萨饼的字幕(如果用户根据'pizza'保存了多个兴趣点)

尽量忘记设置颜色的逻辑,我真的很想知道如何检查 TableView 中的字幕是否彼此相等。我应该说明我们不检查实际文本是否等于特定字符串:

不是:

if(cell.detailTextLabel.text == @"pizza"){
   cell.detailTextLabel.textColor = randomColor;
}

像这样

if(cell.detailTextLabel.text == some other detailTextLabel){
   cell.detailTextLabel.textColor = randomColor;
}

核心数据示例

self.category 是我的 NSManagedObject。在这种情况下,我已经能够将随机生成的颜色保留到核心数据中。我真正需要的是将颜色设置为与已保存到核心数据的字幕相同的逻辑。

-(void)configureCell:(CategoryTableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath{
    //fetch record
    NSManagedObject *record = [self.fetchedResultsController objectAtIndexPath:indexPath];
    self.category = [self.fetchedResultsController objectAtIndexPath:indexPath];

    float red = [self.category.red floatValue];
    float green = [self.category.green floatValue];
    float blue = [self.category.blue floatValue];

    UIColor *randomRGBColor = [[UIColor alloc] initWithRed:red green:green blue:blue alpha:1.0];
    //update cell
    [cell.textLabel setText:[record valueForKey:@"name"]];
    cell.backgroundColor = randomRGBColor;

}

我认为你的做法是错误的。为什么要比较呈现的单元格中的字符串,而不是在它开始呈现之前。当您创建 UITableView 时,您有特定的数据源,至少是 NSString(标题)数组。 您可以实现一个渲染方法,在该方法中循环遍历标题数组,找到等于并创建新的 NSDictionary 数组,例如,对于键 @"title" 您有标题,对于键 @"color" 你已经计算了颜色。在您的 tableView:cellForRowAtIndex 方法中,您只需从数组中获取颜色并分配给 UITableViewCell 实例,同时将文本分配给 detailTextLabel.

您可以在数据层中使用字典来执行类似的操作,将字幕与特定颜色相关联。

var dict = [String: UIColor]
...
if let color = dict[subtitle] {
   //set the color of the cell   
} else {
   let newColor = //some color you haven't used yet
   dict[subtitle] = newColor
}