tableCell中的分段控件

时间:2016-07-21 15:36:03

标签: ios swift uisegmentedcontrol

我在表格单元格中存在分段控制的问题。没有分段控制的动作

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 个答案:

答案 0 :(得分:0)

addTarget中调用prepareForReuse是不正确的,因为在不再需要该单元格时会调用此方法。只有重用的单元格才会有选择器。

第二个问题是目标:您正在传递self,这是表的数据源,但选择器引用了单元格。如果您通过多次向上和向下滚动来调出重复使用的单元格,则您的控件将触发该事件,并且应用程序将因未知的选择器消息而崩溃。

您可以通过将方法移动到数据源类,在cellForRowAtIndexPath中添加目标,并在prepareForReuse中删除目标来解决此问题。

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