получить номер раздела и номер строки при нажатии кнопки пользовательских ячеек? - PullRequest
8 голосов
/ 30 мая 2009

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

Ответы [ 5 ]

26 голосов
/ 31 мая 2009

Вам потребуется реализовать метод обработки событий UIControl на вашем контроллере представления и установить его в качестве обработчика для всех ваших кнопок. то есть внутри вашей функции -tableView:cellForRowAtIndexPath: вы бы сделали что-то вроде:

[theCell.button addTarget: self
                   action: @selector(buttonPressed:withEvent:)
         forControlEvents: UIControlEventTouchUpInside];

Тогда ваш обработчик событий будет выглядеть так:

- (void) buttonPressed: (id) sender withEvent: (UIEvent *) event
{
    UITouch * touch = [[event touches] anyObject];
    CGPoint location = [touch locationInView: self.tableView];
    NSIndexPath * indexPath = [self.tableView indexPathForRowAtPoint: location];

    /* indexPath contains the index of the row containing the button */
    /* do whatever it is you need to do with the row data now */
}
8 голосов
/ 30 мая 2009

Несколько мыслей:

Вы можете выполнять итерацию по иерархии суперпредставления кнопки, пока не найдете UITableViewCell, затем вызвать - (NSIndexPath *) indexPathForCell: (UITableViewCell *) в UITableView.

- (void)buttonClicked:(id)sender {
  UIView *button = sender;

  for (UIView *parent = [button superview]; parent != nil; parent = [parent superview]) {
    if ([parent isKindOfClass: [UITableViewCell class]]) {
      UITableViewCell *cell = (UITableViewCell *) parent;           
      NSIndexPath *path = [self.tableView indexPathForCell: cell];

      // now use the index path

      break; // for
    }
  }
}

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

Вы можете поочередно создавать подкласс UITableViewCell для инкапсуляции кнопки. Ваш UITableViewCell может отвечать на события кнопки и ретранслировать событие своему делегату, передавая себя. Затем делегат события может вызвать - (NSIndexPath *) indexPathForCell: (UITableViewCell *) ячейку в UITableView, чтобы получить путь индекса.

6 голосов
/ 30 мая 2009

Следующий метод вызывается при выборе ячейки в вашем tableView:

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

для доступа к номеру раздела: int section = indexPath.section;

для доступа к номеру строки (в правильном разделе): int row = indexPath.row;

2 голосов
/ 30 мая 2009

UITableView может преобразовать координату CGPoint в indexPath :

-(NSIndexPath *)indexPathForRowAtPoint:(CGPoint)point
1 голос
/ 31 мая 2009

Добавить переменную экземпляра can вашего подкласса UITableViewCell, чтобы сохранить путь индекса ячейки:

NSIndexPath *myIndexPath;

При создании ячейки в:

cellForIndexPath:

передать указательный путь во вновь созданную / переработанную ячейку.

Теперь, когда вы нажимаете кнопку, просто прочитайте путь индекса из ивара вашей клетки.

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