はのような音必要として働かなければなりませんセル内の特定のビューをタップすると[UITableViewDelegate tableView:didSelectRowAtIndexPath:]
が呼び出されるのを避けたいとします。あなたのUITableViewCell
サブクラスで[UIView hitTest:withEvent:]
を無効にすることで、これを達成することをお勧めします。 [UIView hitTest:withEvent:]
のデフォルトの戻り値は、現在のビュー最も遠い子孫であり、点を含む
ビューオブジェクトに従うと定義されます。ポイントが受信者のビュー階層の外部にある場合はnilを返します。
ので、それをオーバーライドし、代わりにUITableViewCell
インスタンスの代替UIView
インスタンス(あなたのサブビューのインスタンス)を返すことによって、我々はTableViewControllerはあなたがUITableViewCell
インスタンス以外の何か他のものまであることを信じることができます。
例は以下のようになります(私はスウィフトの非常に限られた知識をしました私のapplogies。。):
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
// suppose you put all your subviews in contentView
for (UIView *subview in self.contentView) {
// translates the point relative to the subviews coordinate system.
CGPoint convertedPoint = [self convertPoint:point toView:subview];
// returns the subview instance if the touch happens inside the subview.
if (CGRectContainsPoint(subview.bounds, convertedPoint)) {
return subview;
}
}
// call the super's implementation if you find the touch didn't hit any sub view
return [super hitTest:point withEvent:event];
}
あなたが選択= .noneを使用し、自分でセル内の選択を扱う、しようとしましたか? –
@ReinierMelianはい、言及したように、テーブルビューのデフォルト選択を使用する必要があります。これはすべてのサブビューを繰り返し、ラベルの背景をクリアしてセルの選択ビューを表示します。 – Sencha
私の答えをチェックし、それを試してみて@Senchaを教えてください –