我有一个自定义的UIView
类。在它内部,我为UIImageView
声明了一个IBOutlet
属性。
#import <UIKit/UIKit.h>
@interface SettingItem : UIView{
}
@property (strong, nonatomic) IBOutlet UIImageView *myImage;
@end
现在我使用的是故事板。这里有一个视图控制器。我把UIView
拖到了viewcontroller。我拖动了一个UIImageView
作为上面UIView
的子视图。我从storyboard中将"SettingItem“类设置为UIView
。我通过从公用程序窗口从SettingItem
的插座中正常拖动,将插座连接到myImage。
SettingItem
实现
#import "SettingItem.h"
@implementation SettingItem
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
[self baseInit];
}
return self;
}
-(id) initWithCoder:(NSCoder *)aDecoder{
self = [super initWithCoder:aDecoder];
if (self) {
// Initialization code
[self baseInit];
}
return self;
}
- (void) baseInit{
NSLog(@"myImage %@"self.myImage);
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// Drawing code
}
*/
@end
现在我的问题是myImage
总是nil
,在NSLog
上面只打印插座的(null)
。我检查了storyboard中的视图,并检查了它的outlet引用和指向myImage
。我遗漏了一些东西。我在谷歌上寻求帮助,但找不到任何解决方案。
你能指出我做错了什么吗?
发布于 2014-06-26 21:11:39
在您的视图中覆盖awakeFromNib -这是在分配IBOutlets之后调用的第一个生命周期方法,并且是您的代码的正确位置。
发布于 2016-04-16 13:52:04
在awakeFromNib中初始化它们:
- (void)awakeFromNib
{
//init code
}
发布于 2013-01-14 02:26:15
我刚刚遇到了完全相同的问题,解决方案非常简单:
您正在访问myImage
to soon -就是这样。
使用-(id) initWithCoder:(NSCoder *)aDecoder{
和- (id)initWithFrame:(CGRect)frame
时,还没有绘制UIView
。所以myImage还没有初始化。
如果您添加一个UIButton
和一个IBAction
并执行以下操作,则可以对其进行测试:
- (IBAction)buttonClicked:(id)sender {
NSLog(@"%@",myImage);
}
您将看到myImage
如何不再是nil
。
https://stackoverflow.com/questions/14089410
复制相似问题