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

时间:2015-07-22 19:36:08

标签: ios xcode tableview tableviewcell subtitle

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

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

例如,如果有多个具有相同字幕的单元格 - 假设我有三个单元格,其中有一个字幕表示披萨 - 我想将披萨的颜色设置为绿色。

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

尝试忘记设置颜色的后勤工作,我真的很想知道如何在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;

}

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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
}