我正在使用以下代码使不同的 UIView 可点击(它们不是从 UIControl 继承的):
UITapGestureRecognizer* gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(userTappedOnLink:)];
[labelView setUserInteractionEnabled:YES];
[labelView addGestureRecognizer:gesture];
但我也想在突出显示时更改样式。我该怎么做?
最佳答案
将 UILongPressGestureRecognizer 而不是 UITapGestureRecognizer 附加到父 View ,并根据您的喜好设置它的属性。跟踪和响应选择的方法是以适当的方式实现 userTappedOnLink 方法。当手势识别器被激活并且你通过跟踪识别器状态知道发生了什么时,这个方法将在短时间内被调用很多次。
实现 UIView 子类并创建方法,例如选择和取消选择,并为每个方法自定义 View 属性。然后只需找到要选择或取消选择哪个 UIView 子类,这很容易通过 UIGestureRecognizer 方法返回父 View 中的点并遍历它的 subview ,同时检查触摸点是否在特定 subview 框架内。
- (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;
}
}
关于iphone - 如何在点击时更改 UIView 的样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6006851/