1

4 つの行を含む UITableView があります。各行には、DCRoundSwitch を持つカスタム セルがあります。value-changed イベントは IB で switchChanged メソッドにリンクされています。cellForRowAtIndexPath でスイッチを持つ新しいセルが必要になるたびに、新しいセルのスイッチを ivar に割り当てて、次のようにプログラムで制御できるようにします。

       self.categorySwitch = ((FilterViewCell *)cell).sectionSwitch; 

初めてスイッチに触れた後、スイッチが完全に機能し、switchChanged メソッドがトリガーされます。

問題: 新しいセルが必要になるかテーブルがリロードされるたびに、スイッチに触れることなく、switchedChanged メソッドが起動されます。switchChanged メソッドの最後ですべてのターゲットを削除しようとしましたが、それでもうまくいきませんでした:

       [theSwitch removeTarget:nil action:NULL forControlEvents:UIControlEventAllEvents];

これは、UISwitch を使用して完全に機能します。

助言がありますか?DCRoundSwitch は優れた代替手段のようであり、私はそれを使用したいと考えています。

ありがとう

4

2 に答える 2

1

以下に示すように、イベントを UIControlEventTouchUpInside に変更してみてください...

   [theSwitch removeTarget:nil action:NULL forControlEvents:UIControlEventTouchUpInside];

DCRoundSwitch.m ファイルの setOn:animated: メソッドのイベントも変更します。

   [self sendActionsForControlEvents:UIControlEventTouchUpInside];
于 2012-09-25T15:26:43.167 に答える
1

DCRoundSwitch.m ファイルで、メソッドを見つけます。

- (void)setOn:(BOOL)newOn animated:(BOOL)animated ignoreControlEvents:(BOOL)ignoreControlEvents

次の 2 行を削除します。

[[self allTargets] makeObjectsPerformSelector:@selector(retain)];
[[self allTargets] makeObjectsPerformSelector:@selector(release)];
于 2012-11-28T09:59:29.650 に答える