试图从didSelectCellAtIndex将图片加载到新的ViewController中

时间:2015-07-12 17:44:27

标签: ios uiviewcontroller uicollectionview

我有一个CollectionView,在didSelectItemAtIndexPath方法中,我实例化了一个新的ViewController,在ViewController上设置String属性来保存图像的名称。然后在viewDidLoad或新ViewController中的viewDidAppear方法中,我尝试使用vc.imageName属性设置图像。

以下是代码:

// 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中。

1 个答案:

答案 0 :(得分: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以获取更多信息。

另外,有关prepareForSegue:sender:方法的详细信息,请参阅UIViewController Class Reference