2013-11-12 2 views
0

Когда я проверяю первую ячейку после загрузки - ничего не происходит, я нажимаю снова и снова - ничего не происходит. Я могу проверить другие ячейки, второй, третий и т. Д., И только после этого я могу проверить первую ячейку. Это мой метод:Ошибка при попытке проверить только одну ячейку в tableview

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSUInteger row = indexPath.row; 
    NSUInteger oldRow = lastIndexPath.row; 
    if (oldRow != row) { 
     UITableViewCell *newCell = [tableView cellForRowAtIndexPath:indexPath]; 
     newCell.accessoryType = UITableViewCellAccessoryCheckmark; 
     UITableViewCell *oldCell = [tableView cellForRowAtIndexPath:lastIndexPath]; 
     oldCell.accessoryType = UITableViewCellAccessoryNone; 
     lastIndexPath = indexPath; 
    } 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
} 

Или, может быть, вы можете посоветовать другой способ сделать это (проверку только одна ячейки в Tableview), потому что я нашел только модели с большим количеством коды и трудно понять.

+0

Вы инициализируете lastIndexPath в своем представленииDidLoad? – Albara

+0

В чем проблема? –

+0

Он не может выбрать первую строку, не выбрав другую строку. –

ответ

2

Это происходит потому, что при первой вашей lastIndexPath переменная nil, так lastIndexPath.row вернет 0. Если вы нажмете на первой строке, эта строка также 0, поэтому он не будет вступать в if заявление. Заменить это заявление на: if (!lastIndexPath || oldRow != row)

+0

Отлично! Большое спасибо! –

+0

Можете ли вы мне помочь? Проверка только одной ячейки работает, но теперь мне нужна возможность снять галочку с ячейки и оставить все табло просмотрено. Я думал, что 'else if (cell.accessoryType == UITableViewCellAccessoryCheckmark) { cell.accessoryType = UITableViewCellAccessoryNone; } 'будет работать, но это не так. –

+0

Опубликовать весь метод – Levi

0
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell* cell; 
    //cell creation code 
    cell.accessoryType = nil != lastIndexPath && lastIndexPath.row == indexPath.row ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone; 
    return cell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSArray* reloadRows = nil == lastIndexPath ? @[indexPath] : @[lastIndexPath, indexPath]; 
    lastIndexPath = indexPath; 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
    [tableView reloadRowsAtIndexPaths:reloadRows withRowAnimation: UITableViewRowAnimationAutomatic]; 
} 

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

  • Нет связанных вопросов^_^