0

抱歉,如果我忽略了对我的问题的潜在答案,但是在子视图 UIViewController 类中使用带有 UILabel 的 UITapGestureRecognizer 时遇到了麻烦...

基本上,我创建了一个自定义 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: 方法来接受参数?

如果有人能指出我正确的方向,那就太好了。任何帮助将不胜感激!

4

2 回答 2

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];
}

希望这可以帮到你。

于 2012-06-07T01:37:21.397 回答
0

如果您需要包含包含手势识别器的标签的视图框架,您不能这样做:

gestureRecognizer.view.superview.frame;

得到框架?

手势识别器的选择器应采用以下形式

- (void)gestureRecognizerDidFire:(UIGestureRecognizer *)recognizer;

如果您将选择器设置为,识别器将自动传递,@selector(gestureRecognizerDidFire:)并且您可以访问其中的视图属性。

于 2012-06-07T02:04:29.567 回答