Изменение изображения для кнопки раскрытия деталей (Xcode 4.2)

#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 /…