2015-03-01 2 views
0

Я делаю приложение iOS, основанное на представлении таблицы. В каждой ячейке таблицы видны четыре кнопки, выровненные внизу. У меня есть класс ячеек, который довольно стандартный, и feedController для обработки таблицы и установки всех элементов ячейки.Управление взаимодействием кнопки dequeueReusableCell в iOS Swift

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

+0

Использование addTarget: действие: forControlEvents: в cellForRowAtIndexPath, и установить цель в себя (которая будет контроллером), а затем реализовать метод действия кнопки в контроллере. – rdelmar

+0

Проблема с addTarget: action: forControlEvents заключается в том, что действие получает только кнопку, поэтому вы не знаете, в какой ячейке. Вы также жестко кодируете понимание того, как ячейка представляет данные в контроллере табличного представления. Лучше, чтобы ваша ячейка обеспечивала блокировку или делегирование вызовов, вы можете контролировать, какую информацию может передавать ячейка. Или просто передайте ячейку в блоке/делегате. См. Мой ответ. –

ответ

0

Можете ли вы добавить распознаватель жестов, как вы делаете свой cellForItemAtIndexPath? Так что у меня было что-то подобное с целью сбора, и то, что я сделал, как это в:

func collectionView(collectionView: UICollectionView!, cellForItemAtIndexPath indexPath: NSIndexPath!) -> UICollectionViewCell! 
    { 
     var cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as MyCollectionView 
... 

Я хотел бы добавить жест распознаватель к каждой ячейке

т.е.

cell.addGestureRecognizer(UITapGestureRecognizer(target: self, action:Selector("tapAction:"))) 

А потом что-то например:

func tapAction(recognizer: UITapGestureRecognizer) { 
    ... 
} 

поэтому распознаватель попадает в конкретный элемент, и я мог бы принять acti соответственно (в моем случае у меня был свой источник данных, и я бы нашел элемент в массиве путем литья распознавателя в ячейку, поиска соответствующего поднабора и значений обновления на нем)

0

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

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

How can I get index path of cell on switch change event in section based table view

+0

Мне нравится этот метод, и я думаю, что это правильный способ, я просто не уверен, как это сделать, используя swift, потому что у него нет @property:/Я что-то читал о закрытии, но я не слишком уверен, как заставить их работать с этим –

+0

Кажется, что swift не имеет свойств и что «var» эквивалентен. См. Здесь: http://stackoverflow.com/questions/24014800/property-synthesize-equivalent-in-swift. Просто назначьте блоки var, и вы выключены и запущены. –

0

Если после нескольких ячеек вы получите то же взаимодействие, это возможно потому, что вы многоразовое освобождение пакета из очереди клетки, и вы получаете ту же ячейку. Убедитесь, что вы установили свой вызов .setTarget() для своих кнопок в вашем источнике данных tableView (tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) каждый раз, когда ячейка выгружена. Это поможет, если вы поделитесь тем, как вы обрабатываете dequeuing, чтобы убедиться, что это ваша проблема.

Смежные вопросы