我使用以下代码制作了不同的UIView的tappable(它们不是从UIControl继承的):
UITapGestureRecognizer* gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(userTappedOnLink:)];
[labelView setUserInteractionEnabled:YES];
[labelView addGestureRecognizer:gesture];
但我也想在突出显示时更改样式。我怎么做?
最佳答案
将UILongPressGestureRecognizer而不是UITapGestureRecognizer附加到父视图,然后根据自己的喜好设置其属性。跟踪和响应选择的方法是以适当的方式实现userTappedOnLink方法。激活手势识别器后,您会在很短的时间内多次调用此方法,并且通过跟踪识别器状态可以知道发生了什么。
实现UIView子类并创建方法(例如选择和取消选择),并为每个方法自定义视图属性。然后,只需找到要选择或取消选择的UIView子类,这很容易通过父视图中的UIGestureRecognizer方法返回点并在检查接触点是否在特定子视图框架内时遍历子视图来实现。
- (IBAction)userTappedOnLink:(UIGestureRecognizer*)sender
{
switch (sender.state)
{
case UIGestureRecognizerStateBegan:
{
CGPoint touchPoint = [sender locationInView:self.parentView];
for (UIView *subView in [self.parentView subViews)
{
if (CGRectContainsPoint(subView.frame, tapPoint))
{
self.activeSubView = self.subview;
break;
}
}
[self.activeSubView select];
case UIGestureRecognizerStateChanged:[self.activeSubView doNothing];; break;
case UIGestureRecognizerStateEnded:[self.activeSubView deSelect]; self.activeSubView = nil; break;
}
}