2016-07-21 2 views
2

У меня проблема с сегментированным контролем в ячейке таблицы. Нет действия сегментированной управленияСегментированный контроль в таблицеCell

segmentedFilter.addTarget(self, action: #selector(ProductListFilterCell.filterSelected), forControlEvents: .AllEvents) 

Целевая функция:

func filterSelected() { 
    if let order = ProductListViewModel.OrderBy(rawValue: segmentedFilter.selectedSegmentIndex), let change = orderChanged{ 
     change(order) 
    } 
} 

Это возможно сегментировали контроль в ячейке таблицы?

+1

Какой метод выполняет вызов 'addTarget'? Используете ли вы раскадровку/NIB или создаете свою ячейку программно? – dasblinkenlight

+0

prepareForReuse() – JaSHin

ответ

0

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

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

Вы можете исправить это, перемещая метод в класс источника данных, добавив цель в cellForRowAtIndexPath и удалив цель в prepareForReuse.

segmentedFilter.addTarget(self, action: #selector(ProductListDataSource.filterSelected), forControlEvents: .AllEvents) 
//            ^^^^^^^^^^^^^^^^^^^^^^ 
+0

Я добавляю 'cellFilter.segmentedFilter.addTarget (self, action: #selector (MainTableView.filterSelected (_ :)), forControlEvents: .AllEvents)' to 'cellForRowAtIndexPath' и все еще не работает :( – JaSHin

+0

Я также пробовал IBAction и не работает тоже – JaSHin

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