我尝试使用ViewController
推送到prepareForSegue
。当我推动时,我想在推动视图控制器中的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;
}
}
}
我在ImageView
中有一个HomeViewController
。我尝试使用此vc.backImageView.image = capturedImage;
设置它的图像。 capturedImage
不为空。但图像未在ImageView中设置。
我该如何解决这个问题?
提前致谢!
答案 0 :(得分:2)
你的分类尚未设置,我相信backImageView此时为空。有backImage属性,当backImageView准备就绪时(添加到视图层次结构中,viewDidLoad是个好地方)然后设置它的图像属性。
答案 1 :(得分:0)
1)你应该使backImageView属性(以及HomeViewController的所有其他出口)都是私有的,因为对于这个视图,HomeViewController是专门负责的,没有其他类应该能够操纵这个视图。这是iOS开发中目前已建立的惯例。您可以通过在HomeViewController .m文件中的@implementation关键字上方添加类扩展来实现此目的。
@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中声明一个公共方法。文件名为configureWithImage
- (void)configureWithImage:(UIImage *)paramImage;
并实施它。像这样的文件
-(void)configureWithImage:(UIImage *)paramImage
{
self.capturedImage = paramImage;
}
4)接下来你需要确保在imageview中使用传递的图像,因为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...
}
}
“故事的士气”是通过拥有适当的公共接口(配置方法的唯一入口点)来解耦这两个实体。这意味着源视图控制器仅传递图像,而不必必须知道ANYTHING 关于目标VC中发生的事情。然后由负责的目标视图控制器处理该图像。
如果您改变主意并在HomeViewController中进行一些布局/视图内容更改(可能的过滤器并处理图像以获得视觉效果)稍后,源视图控制器将不会受到影响<强>完全因为HomeViewController中的小麦是其他人没关心的,你将保持公共配置方法不变。这意味着更改不需要在prepareForSegue中维护代码,仅在目标VC中。