使用IBOutlet的UIImageView alloc]initWithImage不工作



我通常遵循在方法中创建对象的模式(如viewDidLoad),保留属性,然后释放创建的原始对象。这样的东西:

NSArray *myArray = [NSArray alloc] initWithObjects:@"1", @"2", @"3", nil];
self.array = myArray;
[myArray release];

我想我可以用UIImageView做同样的事情。我在.xib中创建了一个UIImageView。我有一个出口,这是一个像这样的财产

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

在我的viewDidLoad中,我做:

UIImageView *imgView = [[UIImageView alloc] initWithImage;[UIImage imageNamed:@"arrow.png"]];
self.imageView = imgView;
[imgView release];

如果我运行这个,屏幕上不会显示任何内容。但是,如果我只是在viewDidLoad中这样做:

[self.imageView setImage:[UIImage imageNamed:@"arrow.png"]];

我确实在屏幕上看到了我的箭头图像。UIImageView有什么不一样的地方吗?

由于第一个响应而编辑:UIImageViewUITableView的不同之处在于我需要将其作为子视图添加到当前视图中吗?当我在IB中创建UITableView时,我不会将其添加为viewDidLoad中的subview

谢谢。

您忽略了IBOutlet工作原理背后的要点。如果在.xib中指定了某个东西,那么它已经分配给您了:)您只需使用它。

因此[self.imageView setImage:[UIImage imageNamed:@"arrow.png"]];工作,因为您刚刚为它分配了一个图像。

但是,在进行时

UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"arrow.png"]];
self.imageView = imgView;
[imgView release];

实际上,您取消分配了IBself.imageView = imgView;行创建的imageView实例,并设置了一个新实例,也没有将其作为子视图添加到任何内容中。由于它是一个新实例,因此需要添加它!!但无论如何,如果您使用IBOutlet ,这种方法是错误的

您需要将self.imageView添加到视图层次结构中。

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.imageView = ...
    // You are missing this part!
    [self.view addSubview:self.imageView];
    ...
}

PS。您不需要将UIImageView属性标记为IBOutlet,因为您没有使用Interface Builder来构建视图。

最新更新