2016-07-21 60 views
2

我在表格單元格中存在分段控制問題。分段控制表格中的分段控制細節

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

prepareForReuse中調用addTarget是錯誤的,因爲在不再需要單元格時調用此方法。只有重用的單元格纔會有選擇器。

第二個問題是目標:您傳遞的是self,它是表的數據源,但選擇器引用單元格。如果您通過上下滾動幾次來重新使用單元格,則您的控件會觸發該事件,並且該應用程序會因未知的選擇器消息而崩潰。

您可以通過將該方法移動到數據源類中,在cellForRowAtIndexPath中添加目標以及在prepareForReuse中刪除目標來解決此問題。

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

我添加了'cellFilter.segmentedFilter.addTarget(self,action:#selector(MainTableView.filterSelected(_ :)),forControlEvents:.AllEvents)'到'cellForRowAtIndexPath'並且仍然不工作:( – JaSHin

+0

我也嘗試過IBAction不起作用 – JaSHin