7

UIControl - 改变分配的选择器:addTarget & removeTarget

声明您应该在更改为另一个目标之前删除目标。但是,如果我在cellForRowAtIndexPath中设置目标怎么办?即使目标没有改变,我是否应该在再次添加之前删除目标?如果我不删除它,它会调用该方法两次还是会覆盖它?

[cell.cellSwitch removeTarget:self action:@selector(notifySwitchChanged:) forControlEvents:UIControlEventValueChanged];
[cell.cellSwitch addTarget:self action:@selector(notifySwitchChanged:) forControlEvents:UIControlEventValueChanged];
4

2 回答 2

1

我没有添加/删除目标,而是发现如果我已经继承了UITableViewCell,我将添加一个新委托并将委托设置为视图控制器。这样,在委托上调用的任何方法都可以传入整个单元格,因此我可以通过调用UITableView'sindexPathForCell方法来获取单元格的索引路径。

于 2016-01-04T02:21:00.510 回答
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;
}
于 2012-10-30T12:25:45.580 回答