Различают accessoryView и ряд на ощупь

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

Чтобы зафиксировать их нажатие на аксессуар, я использую следующий метод:

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath;{
NSLog(@"accessory button tapped");
  }

Кроме того, я не использую стандартные показатели. Вместо этого я использую пользовательские изображения следующим образом:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

 [cell setAccessoryView:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"checkmark.png"]]];

}

это переопределяет стандартную вспомогательную кнопку и показывает изображение. Примечание. Оно показывает изображение независимо от того, какой индикатор раскрытия установлен в раскадровке, нет, флажок, индикатор раскрытия и т. Д.

Однако в настоящее время

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath;{
NSLog(@"accessory button tapped");
  }

метод не стрельба.

Есть несколько ответов на SO, которые предполагают, что этот метод не вызывается, если аксессуар является представлением аксессуара, а не типом аксессуара.

Кто-нибудь знает, можно ли использовать пользовательские изображения и при этом использовать метод нажатием кнопки?

2 ответа

Решение

Соблюдайте ; в сигнатуре вашего метода еще до запуска тела:

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath;{
}

Как примечание от документации Apple:

Обсуждение Делегат обычно реагирует на нажатие на кнопку раскрытия (вспомогательный вид), отображая новый вид, связанный с выбранной строкой. Этот метод не вызывается, когда для строки в indexPath установлено вспомогательное представление.

Этот метод используется для определения касаний на индикаторе раскрытия, а не на дополнительном представлении.

Для того, чтобы поддержать ваши прикосновения аксессуаров, создайте UITableViewCellи добавить UITapGestureRecognizer на вашем дополнительном представлении, чтобы перехватить краны.

Вы можете добавить жест тега в UIImageView с помощью

UIImageView *imgView= [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"checkmark.png"]];
imgView.tag = indexPath.row;
UITapGestureRecognizer *tapGesture1 = [[UITapGestureRecognizer alloc] initWithTarget:self  action:@selector(tapGesture:)];
tapGesture1.numberOfTapsRequired = 1;
[tapGesture1 setDelegate:self];
[imgView addGestureRecognizer:tapGesture1];
[cell setAccessoryView:];

И добавить метод выбора

- (void) tapGesture: (id)sender
{
    //handle Tap...
}    

Надеюсь, это поможет

Другие вопросы по тегам