2013-10-10 4 views
31

Привет, у меня есть ситуация, когда в приложении для iPad у моего master controller есть список и подробности у контроллера есть его детали, типичный шаблон UISplitViewController. То, что я хочу достичь, моя первая строка должна быть первоначально выбрана, а затем я хочу дать выбор выбора пользователю. Я использую cell's setSelected и в didSelectRowAtIndexPath метод удаление выбор как этот.UITableViewCell Set выбрано изначально

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [tableView deselectRowAtIndexPath:indexPath animated:NO]; 
    NSIndexPath* path = [NSIndexPath indexPathForRow:0 inSection:0]; 
    UITableViewCell* cell = [tableView cellForRowAtIndexPath:path]; 
    [cell setSelected:NO]; 
} 

для исходной ячейки, но моя ни клетка становится выбрана после того , пожалуйста, помогите мне.

+0

Вы хотите, чтобы автоматически выбрать первую строку вашего Tableview в? – wesley

ответ

41

попробовать этот

NSIndexPath* selectedCellIndexPath= [NSIndexPath indexPathForRow:0 inSection:0]; 
[self tableView:tableViewList didSelectRowAtIndexPath:selectedCellIndexPath]; 
[tableViewList selectRowAtIndexPath:selectedCellIndexPath animated:YES scrollPosition:UITableViewScrollPositionNone]; 

ИЛИ

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
if (/* should be selected */) { 
    [cell setSelected:YES animated:NO]; 
} 
} 
8

Я не знаю, что вы ожидаете ответа. По умолчанию, если вы хотите, чтобы выбрать первую строку в вашем Tableview с из ручного выбора, просто инициировать didSelectRowAtIndexPath метод как этого

- (void)viewDidAppear:(BOOL)animated { 
    NSIndexPath *indexPath=[NSIndexPath indexPathForRow:0 inSection:0]; 
    [myTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionBottom]; 
} 
70

для ячейка для отображения, вы должны позвонить -setSelected:animated: из -tableView:willDisplayCell:forRowAtIndexPath: примерно так:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (/* should be selected */) { 
     [cell setSelected:YES animated:NO]; 
    } 
} 

Вызов -setSelected из любого другого места не имеет никакого эффекта.

+15

Это должен быть принятый ответ. – RaffAl

+19

Этот ответ будет отличным, если вы могли бы добавить следующую строку [tableView selectRowAtIndexPath: indexPath анимированный: NO scrollPosition: UITableViewScrollPositionNone]; Это позволяет пользователю отменить выбор ячейки. Если эта строка отсутствует, строка не может быть отменена. – cateof

+3

Но если вы хотите использовать [tableView selectRowAtIndexPath: indexPath анимированный: NO scrollPosition: UITableViewScrollPositionNone]; вам нужно вставить его в [tableView: cellForRowAtIndexPath:], потому что в [tableView: weillDisplayCell:] он НЕ будет работать. –

5

Это также поможет в случае POP навигации

.h файл,

NSIndexPath *defaultSelectedCell 

.m File

Поместите этот код в ViewDidLoad

defaultSelectedCell= [NSIndexPath indexPathForRow:0 inSection:0]; 

в viewDidAppear

[self.tableView selectRowAtIndexPath:defaultSelectedCell animated:NO scrollPosition:UITableViewScrollPositionNone]; 

Это поможет, когда вы POP, Поместите этот код в viewWillAppear

[self.catTableView selectRowAtIndexPath:defaultSelectedCell animated:NO scrollPosition:UITableViewScrollPositionNone]; 

в tableView didSelectRowAtIndexPath Метод,

defaultSelectedCell = [NSIndexPath indexPathForRow:indexPath.row inSection:0]; 

Это помогает мне совершенно ни первое время загрузки или поп-навигации.

19

Swift 3: выбора ячейка первоначально

import UIKit 

class MyViewController: UIViewController, UITableViewDelegate { 
    @IBOutlet weak var tableView: UITableView! 
    ... 

    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { 

     if /* your code here */ == indexPath.row { 
      tableView.selectRow(at: indexPath, animated: false, scrollPosition: UITableViewScrollPosition.none) 
     } 
    } 

    ... 
} 
+2

Это должен быть выбранный ответ, так как он сохраняет выделение, когда выбрана другая строка. Возможно, добавьте проверку этого оператора if, чтобы убедиться, что он выбирает только строку, если она не текущая, y выбрана tho. –

+1

Я согласен с Дугласом. Это должно быть отмечено как правильный ответ. Я искал решение за последние пару часов, и это решит мою проблему. – user30646

+0

@ user30646 тоже здесь! .. Это должен быть правильный ответ, так как он помог мне решить мою проблему! – Pangu

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