Как сделать пользовательский аксессуар ячейки tableView - PullRequest
3 голосов
/ 29 июня 2011

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

[cell setAccessoryType:UITableViewCellAccessoryDetailDisclosureButton];
cell.accessoryView = [[UIImageView alloc]
    initWithImage:[UIImage imageNamed:@"TableView_Green_Disclosure.png"]];

Итак, как мне заставить мой UIImageView вызывать accessoryButtonTappedForRowWithIndexPath всякий раз, когда он касается?

Ответы [ 4 ]

6 голосов
/ 29 июня 2011

Внимательное прочтение accessoryView и accessoryType показывает, что они являются взаимоисключающими способами настройки ячейки.

Установка accessoryType приведет к вызову метода делегата табличного представления при его нажатии.

Настройка accessoryView будет игнорировать настройку accessoryType и даст вам что-то для отображения. Если вы хотите получить обратный вызов из созданного вами пользовательского представления, это должен быть элемент управления, подключенный для этого. (Или любой вид с распознавателем жестов.)

Если вы используете кнопку и установите ее действие на accessoryTapped:, вы получите кнопку в качестве аргумента «отправитель». Вы можете пройти вверх по иерархии представлений, пока не найдете ячейку табличного представления, а затем спросить в табличном представлении, что такое indexPath этой ячейки. После этого вы получите индекс объектов вашей модели, и вы сможете действовать в соответствии с ним.

В дополнение к кнопке, вы можете включить взаимодействие в UIImageView выше и добавить к нему распознаватель жестов.

2 голосов
/ 29 июня 2011

Чтобы кнопка действительно что-то сделала, вам нужно реализовать - (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath из UITableViewDelegate.

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

1 голос
/ 29 июня 2011

Проверьте сообщение в блоге hdr-> cmdline для создания пользовательского дополнительного представления для UITableView. Автор использовал UIButton объекты с изображениями для пользовательского просмотра аксессуаров.

0 голосов
/ 29 июля 2013

Чтобы использовать accessoryView - вам нужно установить для accessoryType ячейки значение UITableViewCellAccessoryNone, поместить UIButton (со связанным изображением) в ячейку, а затем подключить его для получения пользовательских прикосновений.Вы можете использовать что-то вроде приведенного ниже кода в качестве ответа IBAction на прикосновение к UIB-кнопке ячейки:

- (IBAction) accessoryButtonPressed:(id) sender
{
NSUInteger pathInts[] = { 0,0 };
pathInts[1] = self.currentselectedrow; // ivar set when tableview row last selected
NSIndexPath* indexPath = [NSIndexPath indexPathWithIndexes:pathInts length:2];
[self tableView:mytableview accessoryButtonTappedForRowWithIndexPath:indexPath];
}

UIButton будет подключен для выполнения этого связующего кода посредством строки внутри tableView "cellForRowAtIndexPath:"function

[thecell setButtonTarget:self  action:@selector(accessoryButtonPressed:)];

Одна вещь, которую я заметил, заключается в том, что UIB-кнопка, кажется, хочет «провести пальцем вправо» по сравнению с простым «касанием» касания, чтобы вызвать событие - но проблема может быть в моей бета-версии iOS, которая является проблемой,Обратите внимание, что я добавил объект UIButton * с именем cell_accessoryButton к источнику пользовательской ячейки.

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

- (void) setButtonTarget:(MyViewController*)inTarget action:(SEL) inAction
{
[self.cell_accessoryButton addTarget: inTarget
                      action: (SEL) inAction
            forControlEvents: UIControlEventTouchUpInside];
}

Гораздо проще просто использовать ссылку accessoryType и позволить iOS сделать тяжелую работу - но, если вам нужна пользовательская графика и т. Д., - это другой путь, который работает.

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