2010-12-23 6 views
10

Код, кажется, не имеет никакого эффекта. Я хочу, чтобы это было highlighed таким же образом, он выделяет при нажатии на строкуКак выделить строку в UITableView

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    ... 
    [cell.textLabel setHighlighted:YES]; 


    return cell; 
} 
+0

Этот столбец (http://stackoverflow.com/questions/1845773/how-to-initially-select-a-row-in-uitableview) может помочь. – petert

ответ

27

Эта линия будет обрабатывать перекрашивать клетки, этикетки и аксессуары для вас:

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

У вас есть два варианта , Либо использовать выбор табличном:

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

Или изменить цвет фона ячейки таблицы в табличном делегата:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
    cell.backgroundColor = ... 
} 
15
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:1 inSection: 0]; 

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

обычно работает

Если вы используя конструктор интерфейса для создания интерфейса, нужно проверить, что вы указали представление контроллера табличного представления. Если вы фактически не укажете представление, это сообщение выбора может исчезнуть.

(вы указываете представление, выбирая контроллер табличного представления в окне инспектора интерфейса и перетаскивая розетку для «просмотра» в представление таблицы, в котором вы хотите сделать выбор).

2

Вы можете использовать

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    ... 
    [cell.textLabel setHighlighted:YES]; 


    return cell; 
} 
3
- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath { 
    return YES; 
} 

- (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath { 
    // do something here 
} 

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

+0

Доступно только в iOS 6 http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.html –

21

Как уже отмечалось, можно программно выбрать ячейку с помощью этого метода:

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

Тем не менее, должен быть осторожным , чтобы не вызвать этот метод слишком рано.

В первый раз, что контроллер, содержащий сказал tableView является initialized, самым ранним, что вы должны вызвать этот метод в viewDidAppear:.

Таким образом, вы должны сделать что-то вроде этого:

- (void)viewDidAppear:(BOOL)animated 
{ 
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; // set to whatever you want to be selected first 
    [tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; 
} 

Если вы попытаетесь положить этот вызов в viewDidLoad, viewWillAppear:, или любые другие вызовы рано вид на протяжении жизненного цикла, то, скорее всего, не работают или имеют нечетные результаты (например, как прокрутка в правильное положение, но не выбор ячейки).

+0

На iOS 9, похоже, работает с 'viewWillApear' и' viewDidAppear' и а не из 'viewDidLoad'. – Adrian

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