2016-05-25 3 views
1

Мой текущий код для выполнения SEGUE моего следующего контроллера представления заключается в следующем:Получение текста UICollectionViewCell Метка

-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView 
{ 
    return 1; 
} 

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section 
{ 
    return [arrayOfDescriptions count]; 
} 

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CustomCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath]; 
    [[cell IconImage]setImage:[UIImage imageNamed:[arrayOfImages objectAtIndex:indexPath.item]]]; 
    [[cell IconLabel]setText:[arrayOfDescriptions objectAtIndex:indexPath.item]]; 
    return cell; 
} 

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self performSegueWithIdentifier:@"GroupsHomeSegue" sender:self]; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

    if ([segue.identifier isEqualToString:@"GroupsHomeSegue"]) 
    { 


     //IconImage is the name of the image in GroupsViewController i want to pass through. Based upon what each cell is set at anyways. 

     //logoImage is the name of the image i want to set in GroupsHomeViewController. 

     //so basically i want to be able to get IconImage and set it as logoImage in a different view controller 

    } 
} 

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

Линии комментариев в моей подготовке к segue описывают точно, чего я пытаюсь достичь. Я просто хочу получить значение отдельного UICollectionViewCell Label.text

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

Я просто хотел бы узнать, как найти значение метки отдельно выбранной ячейки и передать ее на мой подробный контроллер просмотра.

I Have updated the code following examples giving and still no result as the picture does not show.

+0

Когда вы выполните SEGUE с идентификатором, вы можете также отправить indexPath в отправителе и в подготовке к Segue, типаж отправитель, как indexPath и получить значение. –

ответ

1

Чтобы передать информацию следующему контроллеру представления во время Segue, вы бы использовать destinationViewController свойство от параметра segue передается prepareForSegue:sender:. Вам нужно будет настроить свойства на этом контроллере представления назначения, чтобы иметь возможность устанавливать значения, конечно.

Чтобы определить, какую информацию пользователь выбрал, у вас есть несколько вариантов. Вы можете создать свойство на вашем контроллере представления, чтобы сохранить то, что выбрал пользователь, и поместить это значение в свойство в течение collectionView:didSelectItemAtIndexPath: на основе параметра indexPath, или вы можете использовать метод UICollectionViewindexPathsForSelectedItems, чтобы получить путь индекса для выбранных элементов во время prepareForSegue:sender:. Я, как правило, делаю последнее.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"GroupsHomeSegue"]) 
    { 
     NSIndexPath* indexPath = [[someCollectionView indexPathsForSelectedItems] first]; 
     if(indexPath != nil) 
     { 
      NSString* selectedDescription = arrayOfDescriptions[indexPath.item]; 
      NSString* selectedImageName = arrayOfImages[indexPath.item]; 

      // Get the destination view controller (the one that will be shown) from the segue and cast it to the appropriate type. Assuming this should be GroupsHomeViewController, but I'm not entirely sure that's correct since I can't see all your code 
      GroupsHomeViewController* groupsHomeViewController = segue.destinationViewController; 
      // Set the appropriate properties (Again, I'm guessing here since I can't see your code) 
      groupsHomeViewController.logoImage = [UIImage imageNamed: selectedImageName]; 
     } 
    } 
} 
+0

Как получить индивидуальное значение моей метки в моей ячейке uicollectionviewcell? есть ли какой-то короткий код, который я мог бы использовать, или мне придется использовать NSLog для получения той ячейки, на которую я нажимаю? а затем перейти оттуда, чтобы найти значение точной ячейки –

+0

Я не уверен, как вы можете использовать 'NSLog()' так, как вы предлагаете. Вы можете получить ячейку из представления коллекции, если у вас есть «indexPath» выбранной ячейки, и проверьте свойства метки ячейки (и другие). Сказав это, учитывая, что вы заполняете метку из массива значений, вы также можете просто захватить значение из вашего массива непосредственно с помощью 'indexPath' выбранной ячейки. Я добавил немного кода для вашей справки. –

+0

Извините, только что заметил, что вы находитесь в Objective-C, я обновлю код примера. –

0

В "didSelectRowAtIndexPath" передать indexPath как "отправитель" (смотрите ниже код). И в «performSegueWithIdentifier» вы получите индексную ячейку выбранной ячейки.

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { 

     [self performSegueWithIdentifier:@"GroupsHomeSegue" sender:indexPath]; 
    } 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

      if ([segue.identifier isEqualToString:@"GroupsHomeSegue"]) 
      { 
       NSIndexPath *indexPath = (NSIndexPath*)sender; 
       NSString* iconImage = arrayOfImages[indexPath.row]; 

      } 
     } 
0

Попробуйте использовать этот code-

- (void)collectionView:(UICollectionView *)collectionView  didSelectItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
[self performSegueWithIdentifier:@"GroupsHomeSegue" sender:indexPath]; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

if ([segue.identifier isEqualToString:@"GroupsHomeSegue"]) 
{ 

    UICollectionViewCell *cell = [self.collectionView cellForItemAtindexPath:sender]; 
    NSString *text = cell.IconLabel.text; 
    UIImage *image = cell.IconImage.image; 
    GroupsHomeViewController* ghVC = segue.destinationViewController; 
    groupsHomeViewController.logoImage = image; 


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