7

UIControl-割り当てられたセレクターの変更:addTarget&removeTarget

別のターゲットに変更する前に、ターゲットを削除する必要があることを示します。ただし、 cellForRowAtIndexPathでターゲットを設定している場合はどうなりますか?ターゲットが変更されていない場合でも、ターゲットを削除してから再度追加する必要がありますか?削除しない場合、メソッドを2回呼び出すのでしょうか、それとも単に上書きするのでしょうか。

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

2 に答える 2

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 に答える