Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios tableCell中的分段控制_Ios_Swift_Uisegmentedcontrol - Fatal编程技术网

Ios tableCell中的分段控制

Ios tableCell中的分段控制,ios,swift,uisegmentedcontrol,Ios,Swift,Uisegmentedcontrol,我对表格单元格中的分段控件有问题。分段控制不动作 segmentedFilter.addTarget(self, action: #selector(ProductListFilterCell.filterSelected), forControlEvents: .AllEvents) 目标功能: func filterSelected() { if let order = ProductListViewModel.OrderBy(rawValue: segmentedFilter.s

我对表格单元格中的分段控件有问题。分段控制不动作

segmentedFilter.addTarget(self, action: #selector(ProductListFilterCell.filterSelected), forControlEvents: .AllEvents)
目标功能:

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

是否可以在表单元格中使用分段控件?

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

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

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

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

什么方法执行对
addTarget
的调用?您是使用故事板/NIB还是以编程方式创建单元格?我将
cellFilter.segmentedFilter.addTarget(self,action:#selector(MainTableView.filterSelected(:))、forControlEvents:.AllEvents)
添加到
cellForRowAtIndexPath
中,但仍然不起作用:(