Как я могу выделить UITableViewCell - PullRequest
1 голос
/ 12 июня 2009

Мне бы очень хотелось временно выделить UITableViewCell, чтобы обратить внимание на тот факт, что содержащиеся в нем данные изменились.

есть метод UITableViewCell: -setHighlighted: (BOOL) animated: (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 ...] выше для моей попытки.

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

Спасибо,

Карл С-М

Ответы [ 7 ]

16 голосов
/ 21 июня 2010

просто поместите подсветку / изменение фона / любой другой код в:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
4 голосов
/ 14 июня 2009

Поскольку вы делаете все это в tableView:cellForRowAtIndexPath:, с ячейкой на экране ничего не происходит, пока после вы не вернете ячейку. Поэтому установка подсвечиваемой ячейки ничего не делает для пользователя.

То, что вы хотите сделать, - это найти способ установить ячейку как выделенную после того, как вы вернете ее из метода. Возможно, использование метода NSObject performSelector:withObject:afterDelay: может принести вам пользу - вы можете установить ячейку как подсвеченную с задержкой, чтобы она возвращалась, отображалась, затем подсвечивалась.

0 голосов
/ 26 сентября 2012
- (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

0 голосов
/ 18 апреля 2012

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

[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
0 голосов
/ 05 января 2012

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

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

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

Но я не могу сделать подсветку.

Есть предложения?

0 голосов
/ 06 марта 2010

попробуйте использовать [tblView selectRowAtIndexPath:myIndex animated:YES scrollPosition:UITableViewScrollPositionTop]; функция.

0 голосов
/ 14 июня 2009

Задумывались ли вы об изменении 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...