如何在prepareForSegue iOS上设置imageView图像?

时间:2015-02-22 17:42:12

标签: ios objective-c uiimageview segue

我尝试使用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中设置。

我该如何解决这个问题?

提前致谢!

2 个答案:

答案 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中。