2015-07-12 1 views
0

У меня есть CollectionView и в методе didSelectItemAtIndexPath У меня есть экземпляр нового ViewController, устанавливающий свойство String на ViewController для хранения имени изображения. А затем в viewDidLoad или методе viewDidAppear в новом ViewController я пытаюсь установить изображение, используя свойство vc.imageName.пытается загрузить изображение в новый ViewController из didSelectCellAtIndex

Вот код:

// collection.m 


    -(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{ 
     ViewController *vc = [[ViewController alloc] init]; 

     NSString *imageName = [colouringPhotos objectAtIndex:indexPath.row]; 
     vc.imageName = imageName; 
     [self presentViewController:vc animated:YES completion:nil]; 
    } 


// ViewController.h 

@property (nonatomic, strong) NSString * imageName; 

//ViewController.m 

@property (strong, nonatomic) IBOutlet UIImageView *lineImageView; 

-(void) viewDidAppear:(BOOL)animated{ 
    self.lineImageView.image = [UIImage imageNamed:self.imageName]; 
} 

Но изображение не показывает. Я установил цвет фона в ImageView, чтобы проверить, что он отображается в новом ViewController, и я вижу его, но изображение никогда не отображается в UIImageView.

+0

Да, имя null, когда я установил точку останова в viewDidLoad. поэтому имя не передается новому ViewController –

+0

, если я устанавливаю точку останова в файле vc.imageName = imageName. Я могу видеть, что имя_файла есть, но как только оно передается в presentViewcontroller, оно равно null в методе viewDidLoad. –

ответ

1

Вы можете использовать Segue для отображения следующего контроллера вида. Предполагая, что вы используете «ShowNextViewController» в качестве идентификатора для Segue, вы могли бы использовать prepareForSegue:sender: установить imageName свойства контроллера вида назначения:

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

    if ([segue.identifier isEqualToString:@"ShowNextViewController"]) { 
     ViewController *destination = (ViewController *)segue.destinationViewController; 
     NSIndexPath *selectedIndex = [[self.collectionView indexPathsForSelectedItems] firstObject]; 
     destination.imageName = self.colouringPhotos[selectedIndex.row]; 
    } 
} 

Если у вас есть Наладка SEGUE проблема см this iOS Developer Library document для получения дополнительной информации.

Также см. UIViewController Class Reference для получения дополнительной информации о методе prepareForSegue:sender:.

+0

Это блестяще - я только что внедрил метод prepareForSegue, но отсутствовал строка selectedIndex. Бесконечно благодарен. –

+0

Нет проблем. Я рад, что смогу помочь! – ndmeiri

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