UIControl - changing assigned selectors: addTarget & removeTarget
说明您应该在更改之前删除目标。但是如果我在 cellForRowAtIndexPath 中设置目标呢?我是否应该在再次添加目标之前删除它,即使它没有改变?如果我不删除它或它只是覆盖它,它会调用该方法两次吗?
[cell.cellSwitch removeTarget:self action:@selector(notifySwitchChanged:) forControlEvents:UIControlEventValueChanged];
[cell.cellSwitch addTarget:self action:@selector(notifySwitchChanged:) forControlEvents:UIControlEventValueChanged];
答案 0 :(得分:1)
我没有添加/删除目标,而是发现如果我已经将UITableViewCell
子类化,我将添加一个新的委托并将委托设置为视图控制器。这样,调用委托的任何方法都可以传入整个单元格,因此我可以通过调用UITableView
的{{1}}方法获取单元格的索引路径。
答案 1 :(得分:0)
根据我的经验,它只会被调用一次。
但IMO 最好始终使用 removeTarget
因为代码可以在将来更改。有一天,您可能需要添加多个目标和选择器。
是安全,可扩展且可维护的代码。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = // code with reuse identifier ...
if(cell == nil)
{
// making view for cell ....
}
// myAction will be called ONLY ONCE after many times of scrolling
[cell.myButton addTarget:self action:@selector(myAction:) forControlEvents:UIControlEventTouchUpInside];
return cell;
}