很抱歉,如果我忽略了我的问题的潜在答案,但是我在使用UITapGestureRecognizer和子视图UIViewController类中的UILabel时遇到了麻烦......
基本上,我创建了一个自定义UIViewController,它有一个UILabel和一些其他不相关的元素。 但是,这个自定义UIViewController位于自定义的UIScrollView中,启用了分页,标签的偏移量足够大,因此您可以看到下一个UIViewController的标签。我想要做的是当用户触摸“下一个”标签时,scrollRectToVisible:animated:方法触发,实际上是在不滚动的情况下切换页面。 CustomViewController的UILabel位于顶部。
以下是将UITapGestureRecognizer添加到CustomViewController的UILabel时容器UIScrollView的示例代码:
[scrollView addSubview:CustomViewController];
- (void) addSubview: (CustomViewController *) view {
// create view's frame here...
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(fireScrollRectToVisible:view)]; // this is the current problem like a lot of people out there...
[view.Label addGestureRecognizer:tap];
// [super addSubview:view.view];
}
- (void) fireScrollRectToVisible: (CustomViewController *) cvc {
CGRect frame = CGRectMake(cvc.view.frame.origin.x, cvc.view.frame.origin.y, 320, 480);
[scrollView scrollRectToVisible: frame animated:YES];
}
我最初认为这很容易,但是由于@selector不允许你放置参数,因此它非常困难。我认为我需要的是访问CustomViewController的框架并将scrollRectToVisible设置为,但我不确定...
我已尝试过这篇文章,但我在Objective-C上很新,我不完全理解hitTest:withEvent: 我假设hitTest:(CGPoint)与视图的界限有关?
UITapGestureRecognizer initWithTarget:action: method to take arguments?
如果有人能指出我正确的方向那将是伟大的。 任何帮助将不胜感激!
答案 0 :(得分:2)
我会根据您的代码进行一些更改
- (void) addSubview: (CustomViewController *) view {
// create view's frame here...
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(fireScrollRectToVisible:)]; // this is the current problem like a lot of people out there...
[view.Label addGestureRecognizer:tap];
// [super addSubview:view.view];
}
- (void) fireScrollRectToVisible: (UIGestureRecognizer *) gesture {
UIView *view = [gesture.view superview];
CGRect frame = CGRectMake(view.frame.origin.x, view.frame.origin.y, 320, 480);
[scrollView scrollRectToVisible: frame animated:YES];
}
希望这可以帮到你。
答案 1 :(得分:0)
如果您需要包含包含手势识别器的标签的视图框架,那么您不能这样做:
gestureRecognizer.view.superview.frame;
获取框架?
手势识别器的选择器应为
形式- (void)gestureRecognizerDidFire:(UIGestureRecognizer *)recognizer;
如果将选择器设置为@selector(gestureRecognizerDidFire:)
,识别器将自动通过,您可以访问其中的视图属性。