Перейти к просмотру коллекции

У меня есть представление коллекции, которое будет содержать одно или два проанализированных изображения JSON, которые были добавлены в изменяемый массив. Я хотел бы перейти от ячейки представления коллекции, содержащей изображение, к другому контроллеру представления. Но целевой переход будет содержать изображение, отличное от представления коллекции (другое проанализированное изображение JSON). Кроме того, две ячейки представления коллекции будут переходить к разным изображениям. Подытожено ниже:

Просмотр коллекции ------- переход ----------> DesintationVC

Сценарий 1

  1. Objectatindex:0 imageA ------перейти-----> newImageA

Сценарий 2

  1. Objectatindex:0 imageB ------перейти-----> newImageB
  2. Objectatindex:1 imageC ------перейти-----> newImageC

Каков наилучший способ сделать это?

Я думал в том же духе...

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([segue.identifier isEqualToString:@"image1"]) {
    if (sender == [pamphlet_Array objectAtIndex:0]){

    }
}

но не совсем уверен, как поступить.


person DaveLass    schedule 26.05.2013    source источник


Ответы (1)


Вам нужен только один переход от контроллера представления коллекции к контроллеру подробного представления (назовем его detailSegue). Вам также нужен распознаватель жестов касания, просто перетащите его в свой контроллер представления коллекции из раскадровки. Затем создайте IBAction, связанный с этим распознавателем жестов (удерживая нажатой клавишу Ctrl, перетащите его из раскадровки в реализацию вашего контроллера представления, выберите UITapGestureRecognizer в качестве типа отправителя и назовите его, скажем, tapped). В этом методе tapped поместите что-нибудь в следующий код:

- (IBAction)tapped:(UITapGestureRecognizer *)gesture {

    CGPoint tapLocation = [gesture locationInView:self.collectionView];
    NSIndexPath *indexPath = [self.collectionView indexPathForItemAtPoint:tapLocation];
    if (indexPath) {
    self.pamphlet = [pamphlet_Array objectAtIndex:indexPath.item]

        NSLog(@"Selected pamphlet: %@", self.pamphlet);

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

Где self.pamphlet - это свойство вашего контроллера представления коллекции типа Pamphlet* (или того, что вы храните в pamphlet_Array).

Затем в вашем методе prepareForSegue:sender: просто сделайте что-то вроде:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    if ([segue.identifier isEqualToString:@"detailSegue"]){
        YourDetailViewController* vc = (YourDetailViewController*)segue.destinationViewController
        vc.selectedPamphlet = self.pamphlet;
    }
}

Теперь ваш контроллер подробного представления будет знать, какая брошюра была выбрана, и поэтому вы можете показать все, что вам нужно, в зависимости от этого.

Я надеюсь, что это поможет, дайте мне знать, если это сработает!

person micantox    schedule 27.05.2013
comment
Я бы предпочел создать переход от ячейки представления коллекции к следующему контроллеру представления (на самом деле распознаватель жестов касания не требуется) - person catamphetamine; 08.01.2014