2012-06-07 4 views
0

Извините, если я упускать из виду потенциальный ответ на мой вопрос, но у меня возникают проблемы с использованием UITapGestureRecognizer с UILabel внутри класса подтаблицы UIViewController ...IOS с использованием UITapGestureRecognizer с UILabel красть на следующую страницу

В принципе, я создал пользовательский UIViewController с UILabel и несколькими другими нерелевантными элементами. Этот пользовательский UIViewController, однако, находится внутри настраиваемого UIScrollView с включенным пейджингом, а метки смещены настолько, что вы можете видеть следующую метку UIViewController. То, что я хочу сделать, - это когда пользователь касается «следующей» метки, срабатывает метод scrollRectToVisible: анимированный: по существу, переключение страниц без прокрутки. Наверху находятся UILabels CustomViewController.

Вот пример кода для контейнера UIScrollView при добавлении UITapGestureRecognizer к UILabel в CustomViewController в:

[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?

Если кто-то может мне точку в правильном направлении, что было бы здорово. Любая помощь будет принята с благодарностью!

ответ

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

надеюсь, что это может помочь вам.

+0

Удивительно! Это было очень простое решение, я полностью забыл о свойстве superview. Спасибо огромное! – Bill

+0

Ударь меня! Хороший ответ. – kevboh

+0

@ Приходите. :) – looyao

0

Если вам нужен кадр зрения, который содержит метку, которая содержит жест распознаватель, не могли бы вы просто сделать:

gestureRecognizer.view.superview.frame; 

, чтобы получить кадр?

Селектор для жеста распознаватель должен иметь вид

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

распознаватель получит передается автоматически, если вы установите переключатель в @selector(gestureRecognizerDidFire:), и вы можете получить доступ к ней свойство вида.

+0

Спасибо! Это тоже хорошо работает :) – Bill

Смежные вопросы