accessoryButtonTappedForRowWithIndexPath не вызывается - PullRequest
4 голосов
/ 06 июня 2009

У меня отлично работает приложение на симуляторе и на устройстве iPhone OS 2.2.1. Но у меня также есть устройство с установленной iPhone OS 3.0. И когда я нажимаю кнопку раскрытия, метод accessoryButtonTappedForRowWithIndexPath не вызывается, однако цвет кнопки раскрытия становится темнее.

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

Как я могу решить эту проблему?

Ответы [ 2 ]

1 голос
/ 25 июня 2009

Теперь, когда OS 3.0 официально вышла:

Проблема связана со свойством UITableViewCell accessoryType. Вместо этого используйте метод tableView: accessoryTypeForRowWithIndexPath: делегат, если вы нацелены как на OS 2.x, так и на OS 3.x.

0 голосов
/ 18 ноября 2012

К сожалению, «accessoryTypeForRowWithIndexPath» устарел.

Ключ к различному поведению (между UITableViewCellAccessoryDisclosureIndicator и UITableViewCellAccessoryDetailDisclosureButton) заключается в том, что INDICATOR раскрытия не «отслеживает», тогда как КНОПКА раскрытия делает «отслеживание».

То, что вам нужно сделать, это обеспечить собственное распознавание того, где пользователь коснулся ячейки, и использовать это как часть дополнительного кода, чтобы затем позвонить в ваш

- (void)tableView:(UITableView*) tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath*) indexPath

рутина - это то, что происходит с раскрытием кнопки.

Возможно, вы захотите использовать что-то вроде UITapGestureRecognizer, присоединенного к AccessoryView в вашей пользовательской ячейке. Обычно это NIL, поэтому вам нужно добавить UIView в ячейку через IB или программно - изменить его размер - и подключить к объекту ячейки. Затем вы добавили бы некоторый код в функцию - (id)initWithStyle:(UITableViewCellStyle) style reuseIdentifier:(NSString*) reuseIdentifier вашей пользовательской ячейки.

Общая идея показана ниже.

 UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] 
    initWithTarget:myAccessoryView action:@selector(didTap:)];
    tapGesture.delegate = (id <UIGestureRecognizerDelegate>)myTableViewControllerDelegate;
    [containerView addGestureRecognizer:tapGesture];
    [tapGesture release];

Функция didTap: затем перенаправит ваш код или просто сделает то, что вы могли бы сделать в другой подпрограмме.

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

Одним из преимуществ использования AccessoryView в пользовательской ячейке является то, что вы можете поместить UIImageView в представление и затем поместить изображение в UIImageView - это означает, что вы можете использовать любое изображение вместо простого раскрытия «>».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...