2009-06-12 3 views
1

Я бы очень хотел временно выделить UITableViewCell, чтобы обратить внимание на то, что содержащиеся данные изменились.Как я могу выделить 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; 
} 

см [клеточную setHighlight ...] выше моей попытки.

К большому разочарованию, ячейка не выделяет, и я не понял, каким образом заставить ее работать.

Спасибо,

Carl C-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. –

+0

тоже работал для меня – z22

0

у меня есть вариации на это, что продолжает озадачить меня. У меня есть мастер, который использует таблицы для указания возможных вариантов. Как только выбор сделан, я хотел бы временно выделить выбранную строку, а затем перейти к следующему кадру в мастере.

Делаю продвижение в

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

Но я не могу сделать выделение случиться.

Любые предложения?

+0

В итоге я использовал вариацию на предложение Тима о выполнении функции: withObject: afterDelay :. Я выделяю ячейку, а затем переходим к следующему кадру в мастере после небольшой задержки. Достаточно показать выбор, который мне нужен. –

0

Попробуйте это:

[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]]; 
      } 
     } 
} 

использовать это в uitableviewdelegate, а затем, когда вы хотите, чтобы выделить ячейку отметить то клетка называют reloadData на Tableview

Смежные вопросы