2009-06-12 132 views
1

我非常想暫時突出顯示UITableViewCell,以引起人們注意包含數據已更改的事實。有一個UITableViewCell方法:-setHighlighted:(布爾)動畫:(布爾),但我不能讓它做任何事情?如何突出顯示UITableViewCell

這裏是視圖控制器的相關部分:

- (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; 
} 

參見[電池setHighlight ...]以上爲我的嘗試。

很讓我沮喪的是,單元格沒有突出顯示,我還沒有想出任何方法使其工作。

謝謝

卡爾Ç-M

回答

4

因爲你做的這一切tableView:cellForRowAtIndexPath:,什麼也沒發生到屏幕上的細胞,直到後返回小區。因此,設置要突出顯示的單元對用戶來說沒有任何可見的。

你想要做的是找出一種方法來設置單元格從方法返回後突出顯示。也許看着NSObject's performSelector:withObject:afterDelay:方法可能會對你有所幫助 - 你可以將單元格設置爲突出顯示,以便延遲顯示,以便返回,顯示,然後突出顯示。

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

0

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

16

只是把高亮/背景改變/不管在代碼:

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

這個工作對我來說,應該是接受的答案是,imo。 – 2011-01-16 05:22:14

+0

也適用於我 – z22 2014-07-16 09:08:44

0

我有這個正在繼續難倒我的變化。我有一個使用表格來指示可能的選擇的嚮導。一旦做出選擇,我想暫時突出顯示選定的行,然後前進到嚮導中的下一幀。

我做

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

進步,但我不能讓亮點出現。

有什麼建議嗎?

0

試試這個:在的UITableViewDelegate

[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; 
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]]; 
      } 
     } 
} 

使用這個,然後當你想要突出的細胞標記,則電池調用reloadData上實現代碼如下

相關問題