如何在 prepareForSegue iOS 上设置 imageView 图像?
How to set imageView image on prepareForSegue iOS?
我尝试使用 prepareForSegue
推送到 ViewController
。当我推送时,我想在推送视图控制器中的 ImageView
上设置图像。这是我尝试过的,
ViewController
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
UIButton *btn = sender;
if (btn.tag == 50) {
if (jpegData) {
[self saveTempImage:jpegData];
}
if ([segue.identifier isEqualToString:@"HomeView"]) {
HomeViewController *vc = [segue destinationViewController];
vc.backImageView.image = capturedImage;
vc.isBackImage = true;
}
}
}
我在 HomeViewController
中有一个 ImageView
。我尝试使用此 vc.backImageView.image = capturedImage;
设置它的图像。 capturedImage
不为空。但是ImageView中没有设置图片。
我该如何解决这个问题?
提前致谢!
你的outlates还没有在那里设置,我相信此时backImageView是null。有 backImage 属性 并且当 backImageView 准备就绪时(添加到视图层次结构,viewDidLoad 是一个很好的地方)然后设置它的图像 属性.
1) 你应该将 backImageView 属性(以及 HomeViewController 的所有其他出口)设为私有,因为对于这个视图,HomeViewController 是唯一负责的,没有其他 class 应该能够操作这个观点。这是 iOS 开发中的当前既定惯例。您可以通过在 HomeViewController .m 文件中的 @implementation 关键字上方添加 class extension 来实现。
@interface HomeViewControler ()
@property (nonatomic, strong) IBOutlet UIImageView *backImageView;
//...other private properties ...
@end
@implementation MyViewControler
紧接着,您需要将视图出口属性从 .h 接口文件移动到 .m 接口扩展名以进行私有声明。
2) 您也应该在扩展中创建一个名为 capturedImage 的私有 属性。
@interface HomeViewControler ()
@property (nonatomic, strong) IBOutlet UIImageView *backImageView;
@property (nonatomic, strong) UIImage *capturedImage;
@end
3) 在h中声明一个public方法。名为 configureWithImage
的文件
-(void)configureWithImage:(UIImage *)paramImage;
并立即实施。这样的文件
-(void)configureWithImage:(UIImage *)paramImage
{
self.capturedImage = paramImage;
}
4) 接下来您需要确保在图像视图中使用传递的图像,因为 HomeViewController 的 viewDidLoad
很有意义。
-(void)viewDidLoad
{
[super viewDidLoad];
self.backImageView.image = self.capturedImage;
//...other code...
}
5) 最后一步,在 prepareForSegue 中使用图像配置视图控制器
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
UIButton *btn = sender;
if (btn.tag == 50)
{
//...other code...
if ([segue.identifier isEqualToString:@"HomeView"])
{
HomeViewController *vc = [segue destinationViewController];
[vc configureWithImage:capturedImage];
//...other code...
}
}
"morale of the story" 是通过拥有一个适当的 public 接口作为配置(config 方法)的唯一入口点,您可以将两个实体分离。这意味着源视图控制器仅传递图像而 不必知道目标 VC 中发生的任何事情。然后图像由负责的目标视图控制器处理。
您是否应该改变主意并在 HomeViewController 中做一些 layout/view 内容更改(可能过滤并处理图像以获得视觉效果)稍后,来源视图控制器 完全不会受到影响 因为 HomeViewController 中发生的问题与其他人无关,并且您将保持 public 配置方法完好无损。这意味着更改将不需要在 prepareForSegue 中维护代码,只需要在目标 VC 中维护代码。
我尝试使用 prepareForSegue
推送到 ViewController
。当我推送时,我想在推送视图控制器中的 ImageView
上设置图像。这是我尝试过的,
ViewController
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
UIButton *btn = sender;
if (btn.tag == 50) {
if (jpegData) {
[self saveTempImage:jpegData];
}
if ([segue.identifier isEqualToString:@"HomeView"]) {
HomeViewController *vc = [segue destinationViewController];
vc.backImageView.image = capturedImage;
vc.isBackImage = true;
}
}
}
我在 HomeViewController
中有一个 ImageView
。我尝试使用此 vc.backImageView.image = capturedImage;
设置它的图像。 capturedImage
不为空。但是ImageView中没有设置图片。
我该如何解决这个问题?
提前致谢!
你的outlates还没有在那里设置,我相信此时backImageView是null。有 backImage 属性 并且当 backImageView 准备就绪时(添加到视图层次结构,viewDidLoad 是一个很好的地方)然后设置它的图像 属性.
1) 你应该将 backImageView 属性(以及 HomeViewController 的所有其他出口)设为私有,因为对于这个视图,HomeViewController 是唯一负责的,没有其他 class 应该能够操作这个观点。这是 iOS 开发中的当前既定惯例。您可以通过在 HomeViewController .m 文件中的 @implementation 关键字上方添加 class extension 来实现。
@interface HomeViewControler ()
@property (nonatomic, strong) IBOutlet UIImageView *backImageView;
//...other private properties ...
@end
@implementation MyViewControler
紧接着,您需要将视图出口属性从 .h 接口文件移动到 .m 接口扩展名以进行私有声明。
2) 您也应该在扩展中创建一个名为 capturedImage 的私有 属性。
@interface HomeViewControler ()
@property (nonatomic, strong) IBOutlet UIImageView *backImageView;
@property (nonatomic, strong) UIImage *capturedImage;
@end
3) 在h中声明一个public方法。名为 configureWithImage
的文件-(void)configureWithImage:(UIImage *)paramImage;
并立即实施。这样的文件
-(void)configureWithImage:(UIImage *)paramImage
{
self.capturedImage = paramImage;
}
4) 接下来您需要确保在图像视图中使用传递的图像,因为 HomeViewController 的 viewDidLoad
很有意义。
-(void)viewDidLoad
{
[super viewDidLoad];
self.backImageView.image = self.capturedImage;
//...other code...
}
5) 最后一步,在 prepareForSegue 中使用图像配置视图控制器
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
UIButton *btn = sender;
if (btn.tag == 50)
{
//...other code...
if ([segue.identifier isEqualToString:@"HomeView"])
{
HomeViewController *vc = [segue destinationViewController];
[vc configureWithImage:capturedImage];
//...other code...
}
}
"morale of the story" 是通过拥有一个适当的 public 接口作为配置(config 方法)的唯一入口点,您可以将两个实体分离。这意味着源视图控制器仅传递图像而 不必知道目标 VC 中发生的任何事情。然后图像由负责的目标视图控制器处理。
您是否应该改变主意并在 HomeViewController 中做一些 layout/view 内容更改(可能过滤并处理图像以获得视觉效果)稍后,来源视图控制器 完全不会受到影响 因为 HomeViewController 中发生的问题与其他人无关,并且您将保持 public 配置方法完好无损。这意味着更改将不需要在 prepareForSegue 中维护代码,只需要在目标 VC 中维护代码。