如何突出显示UITableViewCell

时间:2009-06-12 09:29:14

标签: iphone

我非常想暂时突出显示一个UITableViewCell,以引起人们对包含数据发生变化这一事实的注意。

有一个UITableViewCell方法:-setHighlighted:(BOOL)动画:( BOOL)但我不能让它做任何事情?

以下是视图控制器的相关部分:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  UITableViewCell *cell;
  switch (indexPath.section) {
    case 0: {
     if (indexPath.row == 0) {
    cell = [[UITableViewCell alloc ] initWithStyle:UITableViewCellStyleDefault 
                                   reuseIdentifier:@"currentLoc"];
    cell.accessoryType = UITableViewCellAccessoryNone;
      cell.textLabel.text = @"This is the special cell";
    }
    [cell setHighlighted:YES animated:YES];
    [cell setHighlighted:NO animated:YES];

    //[cell setNeedsDisplay];

  } else {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                   reuseIdentifier:@"setLocAutomatically"];
    cell.accessoryType = UITableViewCellAccessoryNone;
    cell.textLabel.text = @"Foo";

  }
} break;
case 1: {
  cell = [[UITableViewCell alloc ] initWithStyle:UITableViewCellStyleDefault
                                 reuseIdentifier:@"selectCity"];
  cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
  if (indexPath.row == 0) {
    cell.textLabel.text = @"Select a Bar";
  } else {
    cell.textLabel.text = @"Select a Baz";
  }
} break;
  }
  [cell autorelease];
  return cell;
}

请参阅上面的[cell setHighlight ...]了解我的尝试。

令我沮丧的是,细胞没有突出显示,我还没有想出任何方法让它发挥作用。

谢谢,

Carl C-M

7 个答案:

答案 0 :(得分:16)

只需将突出显示/背景更改/任何代码放入:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath

答案 1 :(得分:4)

因为您在tableView:cellForRowAtIndexPath:中执行了所有这些操作,所以在之后返回单元格时,屏幕上的单元格不会发生任何变化。因此,设置要突出显示的单元格对用户不可见。

您要做的是找出一种方法,将单元格从方法返回后设置为高亮显示。也许查看NSObject's performSelector:withObject:afterDelay:方法可能对您有所帮助 - 您可以将单元格设置为延迟突出显示,以便返回,显示,然后突出显示。

答案 2 :(得分:0)

您是否考虑过改变UILabel的细胞并简单地改变外观而不是试图改变细胞本身。可能是不同的文字颜色还是粗体?

这样您就可以将更改保留在tableView:cellForRowAtIndexPath:

这还可确保突出显示的默认外观不会与您更改的信息的附加消息混合在一起。突出显示可能意味着很多事情,但文本格式可用于表示您的特定概念。

UILabel * textLabel = [yourCell textLabel];
// From here you can alter the text

http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UILabel_Class/Reference/UILabel.html

答案 3 :(得分:0)

尝试使用 [tblView selectRowAtIndexPath:myIndex animated:YES scrollPosition:UITableViewScrollPositionTop]; 功能。

答案 4 :(得分:0)

我有一个变化,这继续困扰我。我有一个使用表来指示可能选择的向导。一旦做出选择,我想暂时突出显示所选行,然后前进到向导中的下一帧。

我在

中取得进步
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

但我无法突显重点。

有什么建议吗?

答案 5 :(得分:0)

试试这个:

[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];

答案 6 :(得分:0)

- (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
      if (//tell if cell is marked) {
            [cell setBackgroundColor:[UIColor colorWithRed:158.0/255.0 green:28.0/255.0 blue:36.0/255.0 alpha:1.0]];
            [[cell textLabel] setTextColor:[UIColor whiteColor]];
            if ([cell detailTextLabel]) {
                  [[cell detailTextLabel] setTextColor:[UIColor whiteColor]];
            }
      }
      else
      {
            [cell setBackgroundColor:[UIColor whiteColor]];
            [[cell textLabel] setTextColor:[UIColor blackColor]];
            if ([cell detailTextLabel]) {
                  [[cell detailTextLabel] setTextColor:[UIColor blackColor]];
            }
      }
}

在uitableviewdelegate中使用它,然后当你想突出显示单元格时,单元格然后在tableview上调用reloadData