1

我有一个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 并将其变灰的正确方法是什么?谢谢。

4

2 回答 2

1

猜测您的意图是存储一组“无效”索引。不会问为什么,但可能有一种更简单的方法可以实现您的意图。

几乎可以肯定,NSIndexPath您存储的对象的实际实例与传递给您的对象secArray不同。cellForRowAtIndexPathcellForRowAtIndexPath将创建 的新实例NSIndexPath;您正在存储“旧”实例。)

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

for (NSIndexPath *path in self.secArray) {
  if ([path compare:indexPath] == NSOrderedSame) {
    cell.textLabel.textColor = [UIColor grayColor];
  }
}
于 2012-10-22T19:28:03.827 回答
0

尝试在tableView:willDisplayCell:forRowAtIndexPath:方法中实现这一点。从文档中:

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

于 2012-10-22T19:27:34.320 回答