Tap Gesture Recognizer на одно нажатие позади

У меня есть collectionView фотографий, при нажатии на фотографию должно отображаться подробное изображение этой фотографии.

Проблема в том, что первая фотография, которую я нажимаю, ничего не делает, а затем каждое нажатие после работает, за исключением того, что на ней отображается фотография, нажатая два раза назад.

Например:

Нажмите Фото 1 ... ничего не делает.

Нажмите "Фото 2 ..." отобразит фото 1.

Нажмите «Фото 6 ...», чтобы отобразить фото 2.

Спасибо за помощь!

ViewController.m

@property (nonatomic) NSArray *photos;

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.collectionView registerClass:[BlissPhotoCell class] 
    forCellWithReuseIdentifier:@"photo"];

    NSURLSession *session = [NSURLSession sharedSession];
    NSString *urlString = [[NSString alloc] initWithFormat:@"https://api.instagram.com/v1/;
    NSURL *url = [[NSURL alloc]initWithString:urlString];
    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
    NSURLSessionDownloadTask *task = [session downloadTaskWithRequest:request completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
        NSString *text = [[NSString alloc] initWithContentsOfURL:location encoding:NSUTF8StringEncoding error:nil];

        NSData *data = [[NSData alloc] initWithContentsOfURL:location];
        NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];

        self.photos = [responseDictionary valueForKeyPath:@"data"];
        dispatch_async(dispatch_get_main_queue(), ^{
            [self.collectionView reloadData];
        });
    }];
    [task resume];

- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath {
    NSDictionary *photo = self.photos[indexPath.row];
    BlissDetailViewController *viewController = [[BlissDetailViewController alloc] init];

    viewController.modalPresentationStyle = UIModalPresentationCustom;
    viewController.transitioningDelegate = self;

    viewController.photo = photo;
    [self presentViewController:viewController animated:YES completion:nil];
}

BlissPresentDetailTransition.h

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext {
    UIViewController *detail = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
    UIView *containerView = [transitionContext containerView];

    detail.view.alpha = 0.0;
    CGRect frame = containerView.bounds;
    frame.origin.y += 20.0;
    frame.size.height -= 20.0;
    detail.view.frame = frame;
    [containerView addSubview:detail.view];

    [UIView animateWithDuration:0.3 animations:^{
        detail.view.alpha = 1.0;
    } completion:^(BOOL finished) {
        [transitionContext completeTransition:YES];
    }];
}

- (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext {
    return 0.3;
}

person Realinstomp    schedule 24.04.2014    source источник
comment
Возможно, вам поможет, если вы разместите соответствующий код. Где код, который устанавливает распознаватель жестов, и где код, который его обрабатывает?   -  person rmaddy    schedule 25.04.2014
comment
Я добавил код didSelectItemAtIndexPath. Это то, что вы искали? Извини за это.   -  person Realinstomp    schedule 25.04.2014
comment
А как насчет кода для распознавателей жестов?   -  person Aaron    schedule 25.04.2014
comment
Чтобы представить BlissDetailViewController, я просто использую didSelectItemAtIndexPath. Так что, наверное, дело в отсутствии жеста? Только мой собственный переход? Я отправлю код для моего пользовательского перехода прямо сейчас.   -  person Realinstomp    schedule 25.04.2014


Ответы (1)


Вы случайно реализовали didDeselect, а не didSelect. Если вы используете автоматическое завершение при вводе текста, это легко сделать, так как didDeselect появляется первым в алфавитном порядке.

person rdelmar    schedule 25.04.2014
comment
Это довольно частая проблема. Я думаю, что я вижу это как минимум раз в неделю здесь, на SO. . - person rmaddy; 25.04.2014
comment
Я просто потратил ДНИ на это. СПАСИБО. Еще одна ошибка связана с слепотой кодирования. Жаль, что у меня не было обзора кода - я уверен, что кто-то другой заметил бы это. - person Reid Ellis; 05.02.2015