Передайте аргумент для выбора

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

Вот мой код:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"]; [self configureCell:cell atIndexPath:indexPath]; return cell; ... [button addTarget:self action:@selector(buttonPressedAction:)forControlEvents:UIControlEventTouchUpInside]; } - (void)buttonPressedAction:(UIButton *)button { //int row = indexPath.row; //NSLog(@"ROW: %i",row); } 

Как передать indexPath в качестве аргумента для моего селектора?

Вы можете либо установить свойство тега кнопки на номер строки:

 button.tag = indexPath.row; 

и извлеките его, используя

 NSInteger row = button.tag; 

или установить объект указательного пути как связанный объект с кнопкой:

 objc_setAssociatedObject(button, "IndexPath", indexPath); 

а также

 NSIndexPath *ip = objc_getAssociatedObject(button, "IndexPath"); 

добавив кнопку в пользовательскую ячейку, вы можете добавить свойство tag UIButton как

 UIButton *sampleButton = [[UIButton alloc] init]; sampleButton.tag = indexPath.row; 

а затем, когда u call, вы можете проверить тег

 - (void)buttonPressedAction:(UIButton*)sender { if(sender.tag==0) { //perform action } } 

Надеюсь, поможет. счастливое кодирование 🙂

Посмотрите эту ссылку , это поможет вам. Это показывает вам, как вы можете это сделать.

Его даже просто, чем установка тега. Попробуй это..

Чтобы получить IndexPath, попробуйте следующий код.

 UIView *contentView = (UIVIew *)[button superview]; UITableViewCell *cell = (UITableViewCell *)[contentView superview]; NSIndexPath *indexPath = [self.tableview indexPathForCell:cell]; 

ИЛИ

 NSIndexPath *indexPath = [self.tableview indexPathForCell:(UITableViewCell *)[(UIVIew *)[button superview] superview]]; 

Просто установите тег кнопки.

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"]; [self configureCell:cell atIndexPath:indexPath]; return cell; ... [button setTag = indexPath.row]; // Set button tag [button addTarget:self action:@selector(buttonPressedAction:) forControlEvents:UIControlEventTouchUpInside]; } - (void)buttonPressedAction:(id)sender { UIButton *button = (UIButton *)sender; int row = [button superview].tag; } } 
Interesting Posts
Давайте будем гением компьютера.