3

touchesBegan/Moved/Ended/Cancelled イベントを監視する UIControl から派生したクラスがあります。これらのイベント内で、次のようにスーパー レスポンダーと次のレスポンダーの両方で同じイベントを呼び出します。

[self.nextResponder touchesEnded:touches withEvent:event];
[self sendActionsForControlEvents:UIControlEventTouchUpInside];
[super touchesEnded:touches withEvent:event];

テーブル ビューを所有する親コントロールがあります。テーブル ビューの各セルには、カスタム コントロールが 1 つずつ含まれています。クリックに応答するために、コントロールを作成し、次のようにテーブル ビュー セルに追加するときに、コントロールにセレクターを割り当てます。

[myControl addTarget:self action:@selector(myControlTap:withEvent:)forControlEvents:UIControlEventTouchUpInside]; 
[cell.contentView addSubview:myControl];

親コントロールのセレクターは次のようになります。

- (void)myControlTap:(id)sender withEvent:(UIEvent *)event{
     //UIEvent is always null!
}

UIEvent が常に nil である理由を教えてもらえますか? カスタム UIControl の代わりに UIButton のインスタンスを使用すると、UIEvent は nil ではありません。さらに、コントロールで sendActionsForControlEvents を呼び出さないと、親コントロールはイベント通知を受け取りません。

4

1 に答える 1

-1

メソッドとセレクターで「withEvent」を「forEvent」に変更します。

于 2012-08-18T08:40:50.373 に答える