尝试从 didSelectCellAtIndex 将图片加载到新 ViewController
trying to load a picture into new ViewController from didSelectCellAtIndex
我有一个 CollectionView,在 didSelectItemAtIndexPath 方法中我实例化了一个新的 ViewController,在 ViewController 上设置了字符串 属性 来保存图像的名称。然后在新 ViewController 的 viewDidLoad 或 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 中。
您可以使用 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:
方法的更多信息。
我有一个 CollectionView,在 didSelectItemAtIndexPath 方法中我实例化了一个新的 ViewController,在 ViewController 上设置了字符串 属性 来保存图像的名称。然后在新 ViewController 的 viewDidLoad 或 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 中。
您可以使用 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:
方法的更多信息。