UITableViewController сделалSelectRowAtIndexPath: (NSIndexPath *) indexPath

Как я могу сослаться на объект ячейки, который был нажат внутри метода didSelectRowAtIndexPath:(NSIndexPath *)indexPath?

У меня есть UISplitViewController, а в MasterView у меня есть таблица с ячейками, где cell.tag = первичный ключ из базы данных sqlite (т.е. таблица заполняется из базы данных). Я могу зафиксировать событие щелчка в приведенном выше методе, но я не понимаю, как я могу передать объект ячейки или как я могу иначе сослаться на него, чтобы получить ячейку. тег. В конечном счете, цель состоит в том, чтобы передать этот идентификатор в подробное представление через делегата Master/Detail, а затем загрузить данные в DetailView на основе идентификатора, полученного от мастера.

Любые советы приветствуются!

Редактировать:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    // Configure the cell.
    cell.textLabel.text = NSLocalizedString(@"Detail", @"Detail");
    Entry *entry = [self.entries objectAtIndex:[indexPath row]];
    [[cell textLabel] setText:[NSString stringWithFormat:@"%@",entry.title]];
    cell.tag = entry.entryID;
    return cell;
}

person David    schedule 27.11.2011    source источник


Ответы (4)


Поскольку у вас уже есть массив записей, вы также можете написать следующее.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    Entry *entry = [self.entries objectAtIndex:[indexPath row]];
}

Я думаю, что это предпочтительнее, чем cellForRowAtIndexPath: потому что

  • вы можете получить весь объект записи, а не только идентификатор.
  • вы можете использовать нецелочисленный идентификатор, например строку.
  • вы не зависите от таблицы или ячейки (развязка).
person hoshi    schedule 27.11.2011
comment
Да, это даже лучше. Я предположил, что мне нужно было пройти I'd и снова запросить БД, но если я могу просто передать весь объект записи, это лучший сценарий. Спасибо! - person David; 27.11.2011

In didSelectRowAtIndexPath:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
}

Обратите внимание, что запрос таблицы на cellForRowAtIndexPath: возвращает ячейку, тогда как запрос контроллера на tableView:cellForRowAtIndexPath: запускает метод делегата.

person aopsfan    schedule 27.11.2011
comment
Это то, что мне нужно. Спасибо! - person David; 27.11.2011

Вы можете использовать метод cellForRowAtIndexPath, чтобы получить UITableViewCell из NSIndexPath.

person Nathanial Woolls    schedule 27.11.2011
comment
Именно здесь я заполняю интересующий меня атрибут ячейки. См. редактирование выше. Вы говорите, что я могу вызвать этот метод изнутри метода didSelectRowAtIndexPath? - person David; 27.11.2011

Вы можете сохранить все идентификаторы в NSMutableArray, а затем передать этот метод в другой класс.

classInstanceName.IntVariableName=[[taskIdArray objectAtIndex:indexPath.row]intValue]

person bhagyavendra    schedule 27.11.2011