2013-05-26 6 views
0

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

CollectionView ------- ---------- переход> DesintationVC

Сценарий 1

  1. Objectatindex: 0 imageA ----- -segue -----> 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]){ 

    } 
} 

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

ответ

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

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

Надеюсь, это поможет, сообщите мне, если это сработает!

+1

Я бы предпочел создать segue из ячейки просмотра коллекции в следующий контроллер представления (никакой аспектный признак жесты не нужен) – asdfasdfads