Пользовательское действие кнопки UITableViewCell? - PullRequest
9 голосов
/ 13 сентября 2011

Я искал решение, чтобы найти решение, но, похоже, не могу найти подходящее для меня. У меня есть пользовательская ячейка с кнопкой внутри. Моя проблема заключается в том, как я могу передать indexPath в метод действия?

Прямо сейчас я делаю

 [cell.showRewards addTarget:self action:@selector(myAction:) forControlEvents:UIControlEventTouchUpInside];

В моем методе cellForRowAtIndexPath мой метод:

-(IBAction)myAction:(id)sender{
NSIndexPath *indexPath = [self.tableView indexPathForCell:(MyCustomCell *)[sender superview]];
NSLog(@"Selected row is: %d",indexPath.row);
}

Есть советы? Спасибо.

Ответы [ 12 ]

1 голос
/ 13 сентября 2011

В [sender superview] вы получаете доступ не MyCustomCell, а contentView. Читать UITableViewCell Ссылка на класс:

contentView Возвращает представление содержимого объекта ячейки. (Только для чтения)

@property(nonatomic, readonly, retain) UIView *contentView

Обсуждение: Представление содержимого объекта UITableViewCell является суперпредставлением по умолчанию для содержимого, отображаемого ячейкой. Если вы хотите настроить ячейки, просто добавив дополнительные представления, вы должны добавить их в представление содержимого, чтобы они располагались надлежащим образом при переходе ячейки в режим редактирования и из него.

Самый простой способ изменить ваш код - это использовать [[sender superview] superview]. Но это перестанет работать, если вы позже измените свою ячейку и вставите кнопку в другое представление. contentView появился в iPhoneOS 2.0. Подобная будущая модификация повлияет на ваш код. Вот почему я не предлагаю использовать этот способ.

0 голосов
/ 21 сентября 2017

Вот самый простой способ сделать это (протестировано на IOS11):

NSIndexPath *indexPath = [myTable indexPathForRowAtPoint:[[[sender superview] superview] center]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...