如何在UITableView中循环遍历数组和灰显文本

时间:2012-10-22 19:08:57

标签: objective-c ios uitableview

我在array中创建了viewWillAppear,控制台中的结果如下所示

data SecArray........... (
        (
        "<NSIndexPath 0x7f17630> 2 indexes [0, 0]"
    ),
        (
        "<NSIndexPath 0x7f96430> 2 indexes [1, 0]",
        "<NSIndexPath 0x7f99c70> 2 indexes [1, 1]",
        "<NSIndexPath 0x7f091a0> 2 indexes [1, 2]"
    ),
        (
        "<NSIndexPath 0xe43e8d0> 2 indexes [2, 0]"
    )
)

我正在尝试使用以下代码为secArray cellForRowAtIndexPath中显示的项目的文本显示灰色

        if ([self.secArray count] > 0) {

        NSLog( @"GrayText Statement...1...");

        if ([self.secArray containsObject:indexPath]) {

            cell.textLabel.textColor = [UIColor grayColor];
            NSLog( @"GrayText Statement...2...");

        } 


    }

不明白为什么第二个if-statement没有被击中......我错过了什么? 在secArray中获取每个indexPath并将其变灰的正确方法是什么?感谢。

2 个答案:

答案 0 :(得分:1)

猜测你的意图是存储一系列无效的&#39;指数。不会问为什么,但可能有一种更简单的方法来实现你的意图。

NSIndexPath中存储的secArray个对象的实际情况几乎肯定与cellForRowAtIndexPath传递给您的对象不同。 (cellForRowAtIndexPath会创建NSIndexPath的新实例;您正在存储旧的实例。 )

您需要比较它们是否相等,而不是检查数组是否包含特定实例:

for (NSIndexPath *path in self.secArray) {
  if ([path compare:indexPath] == NSOrderedSame) {
    cell.textLabel.textColor = [UIColor grayColor];
  }
}

答案 1 :(得分:0)

尝试在tableView:willDisplayCell:forRowAtIndexPath:方法中实现此功能。 来自documentation

  

表视图在使用单元格绘制行之前将此消息发送到其委托,从而允许委托在显示之前自定义单元格对象。此方法为委托提供了覆盖表视图前面设置的基于状态的属性的机会,例如选择和背景颜色。委托返回后,表视图仅设置alpha和frame属性,然后仅在行滑入或滑出时为其设置动画。