#xcode #uitableview #ios5
#xcode #uitableview #ios5
Вопрос:
Я использовал следующую предлагаемую процедуру для изменения изображения кнопки раскрытия деталей в ячейке табличного представления (в ячейке TableView cellForRowAtIndexPath)
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
UIButton *myAccessoryButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 24, 24)];
[myAccessoryButton setBackgroundColor:[UIColor clearColor]];
[myAccessoryButton setImage:[UIImage imageNamed:@"ball"] forState:UIControlStateNormal];
[cell setAccessoryView:myAccessoryButton];
cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
}
Однако событие tableView accessoryButtonTappedForRowWithIndexPath
теперь больше не вызывается при нажатии кнопки.
У кого-нибудь есть идеи относительно того, почему?
Ответ №1:
У меня есть 1 ответ Фрая, но просто для того, чтобы извлечь код с другого сайта, чтобы сделать его более полным: ответ заключается в том, что вам нужно accessoryButtonTapped …. вызов не будет выполнен автоматически, как для встроенного раскрытия деталей, поэтому вам необходимосделайте это самостоятельно с целью кнопки.
Переводя из кода ссылки в ваш пример выше, добавьте эту строку после setImage:
[myAccessoryButton addTarget:self action:@selector(accessoryButtonTapped:event:) forControlEvents:UIControlEventTouchUpInside];
Затем добавьте это позже:
- (void)accessoryButtonTapped:(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];
if (indexPath != nil) {
[self tableView: self.tableView accessoryButtonTappedForRowWithIndexPath: indexPath];
}
}
(скопировано дословно по этой ссылке)
Обратите внимание, что это предполагает, что кнопка создается в UITableViewController (в моем случае я создаю ее в пользовательской ячейке, поэтому ссылки немного отличаются)
Объяснение: accessoryButtonTapped — это пользовательский целевой метод для нашей пользовательской кнопки. Когда кнопка нажата («touchUpInside»), мы находим indexPath ячейки в точке, в которой произошло нажатие, и вызываем метод, который обычно вызывается в табличном представлении.
Комментарии:
1. Отлично … аналогичная реализация находится здесь: iosdevblog.com/2014/07/26 /…