无法更改UIImageView的图像

4

.h

IBOutlet UIImageView *photoImageView;
UIImage *photo;

在viewWillAppear中的.m文件

photoImageView.image = photo;

视图出现后,我无法使用以下方法更改photoImageView:

photoImageView.image = [UIImage imageNamed:@"XXX.png"];

但是改变photo的值是有效的。
photo = [UIImage imageNamed:@"XXX.png"];

它是如何工作的?

2
你是说如果更改iVar 'photo',那么photoImageView中的图像也会更改吗?根据你目前展示的内容,它不应该这样做,但你可能需要发布更多的代码来让我们更好地了解情况。你是直接更改iVar还是使用属性访问器?如果你正在使用属性访问器,它是如何实现的? - Aaron Hayman
1个回答

5

尝试使用这段代码。

//YourController.h

@interface YourController : UIViewController
{
    UIImageView* _photoImageView;
}

@property (retain, nonatomic) IBOutlet UIImageView *photoImageView;

- (IBAction)changeImageAction:(id)sender;

@end

//YourController.m

@synthesize photoImageView = _photoImageView;

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.photoImageView.image = [UIImage imageNamed:@"img.png"];
}

- (IBAction)changeImageAction:(id)sender {

    self.photoImageView.image = [UIImage imageNamed:@"img_2.png"];
}

一些注意事项。

首先,您必须在XCode中正确链接photoImageView IBOutlet。为了测试目的,我创建了一个测试按钮(UIButton),它链接到一个IBActionUIImageView和测试按钮(我都是用IB创建的)都是YourController视图的子级。

记得将您的图片导入项目,并在deallocviewDidUnload中释放内存。

- (dealloc)
{
   [_photoImageView release];
   _photoImageView = nil;

   [super dealloc]
}

- (void)viewDidUnload
{
   [super viewDidUnload];

   self.photoImageView = nil;
}

希望能对您有所帮助。

编辑

该代码不是面向ARC的,但进行一些修改后,也可以在ARC下运行。


他不想要解决这个问题,他只是想要理解为什么会发生这种情况..!! - Saurabh Passolia
1
@samfisher 你说得对!但是提供我认为正确的步骤,可以帮助理解正在发生的事情。谢谢。 - Lorenzo B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接