Ответ Джея великолепен, но если у вас есть несколько разделов, он не будет работать, поскольку indexRow локально для раздела .
Другой способ, если вы используете кнопки в TableView, который имеет несколько разделов, - это передать сенсорные события.
Где вы заявляете свою кнопку в ленивом загрузчике:
- (UIButton *)awesomeButton
{
if(_awesomeButton == nil)
{
_awesomeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[_awesomeButton addTarget:self.drugViewController action:@selector(buttonPressed:event:) forControlEvents:UIControlEventTouchUpInside];
}
return _awesomeButton;
}
Ключевым моментом здесь является привязка ваших событий к методу выбора. Вы не можете передавать свои собственные параметры, но вы можете передавать события.
Функция, к которой подключена кнопка:
- (void)buttonPressed:(id)sender event:(id)event
{
NSSet *touches = [event allTouches];
UITouch *touch = [touches anyObject];
CGPoint currentTouchPosition = [touch locationInView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint: currentTouchPosition];
NSLog(@"Button %d was pressed in section %d",indexPath.row, indexPath.section);
}
Ключом здесь является функция indexPathForRowAtPoint
. Это изящная функция в UITableView
, которая в любой момент выдаст вам indexPath. Также важна функция locationInView
, потому что вам нужно прикосновение в контексте tableView, чтобы оно могло точно определить конкретный indexPath.
Это позволит вам узнать, какая это кнопка, в таблице с несколькими разделами.