Распознаватели жестов на подпредставлениях не работают - PullRequest
0 голосов
/ 20 марта 2012

У меня есть следующий код:

- (void)setPosts:(NSArray *)posts
{
    _posts = posts;


    int totalHeight = 0;
    for (TumblrPost *post in posts) {
        totalHeight += post.thumbH;
    }
dispatch_queue_t mainQ = dispatch_get_main_queue();
dispatch_async(mainQ, ^{
    int cumulativeY = 0;
    int postCount = 0;
    for (TumblrPost *post in posts) {
        NSArray* array = [[NSBundle mainBundle] loadNibNamed:@"ThumbnailView" owner:nil options:nil];            
        ThumbnailView* thumbnail = [array objectAtIndex:0];
        thumbnail.frame = CGRectMake(0,cumulativeY,0,0);
        thumbnail.userInteractionEnabled = YES;

        UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(showMainImage:)];
        [thumbnail addGestureRecognizer:gesture];

        [self.multiThumbnailView addSubview:thumbnail];
        [thumbnail loadUrl:post.url];   

        cumulativeY+=100;//post.thumbH;
        if(postCount >=2)
            break;
        postCount++;
    }
    NSLog(@"Set posts method");
});
}

- (void)showMainImage:(UITapGestureRecognizer *)gesture
{
    if(gesture.state == UIGestureRecognizerStateChanged || gesture.state == UIGestureRecognizerStateEnded)
    {
        int thumbIndex = [self.multiThumbnailView.subviews indexOfObject:gesture.view];
        self.selectedPost = (TumblrPost*)[self.posts objectAtIndex:thumbIndex];

        [self performSegueWithIdentifier:@"ShowMainPost" sender:self];
    }
}

multiThumbnailView - это UIView, который есть у меня в раскадровке, а ThumbnailView - это комбинация xib / class, представляющая собой квадрат 100x100 с надписью «тестовое задание'.

Когда я запускаю свой код, я получаю три прямоугольника в вертикальной линии, но распознаватель жестов не срабатывает, когда я нажимаю на свои подвиды.Все имеет userInteractionEnabled отмечены.Я попытался создать тестовый распознаватель жестов на главном multiThumbnailView, и это сработало.

Пожалуйста, помогите!

1 Ответ

4 голосов
/ 20 марта 2012

Я предполагаю, что ThumbnailView является подклассом UIImageView - который по умолчанию устанавливает userInteractionEnabled в NO.

Убедитесь, что вы установили userInteractionEnabled = YES на каждом ThumbnailView, который хотите перехватить.

EDIT:

Кроме того, вы устанавливаете фрейм ThumbnailView с размером (0,0). Это означает, что это представление в основном невидимо и поэтому не будет перехватывать прикосновения.

И, наконец, пожалуйста, не делайте:

ThumbnailView* thumbnail = [array objectAtIndex:0];

Вместо этого вы можете проверить количество массивов или просто:

ThumbnailView* thumbnail = [array lastObject];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...