Ios 在drawRect方法中,IBOutlet为零
我有一个UIView子类,带有一个名为Ios 在drawRect方法中,IBOutlet为零,ios,uiview,drawrect,null,iboutlet,Ios,Uiview,Drawrect,Null,Iboutlet,我有一个UIView子类,带有一个名为RoundedImageView的xib,它只实现drawRect方法。xib包含一个带有插座的AsyncImageView(它是UIImageView的子类)。此RoundedImageView是自定义表格视图单元格的一部分。在此单元格的awakeFromNib方法中,RoundedImageView不是nil,而是AsyncImageViewoutlet是nil。发生这种情况的原因以及如何解决此问题?在聊天室中与OP讨论后,问题是表单元格/Rounded
RoundedImageView
的xib,它只实现drawRect方法。xib包含一个带有插座的AsyncImageView
(它是UIImageView
的子类)。此RoundedImageView
是自定义表格视图单元格的一部分。在此单元格的awakeFromNib
方法中,RoundedImageView
不是nil,而是AsyncImageView
outlet是nil。发生这种情况的原因以及如何解决此问题?在聊天室中与OP讨论后,问题是表单元格/RoundedImageView
位于一个nib中,而RoundedImageView
与AsycImageView
位于另一个nib中。解决方案是从单元格中移除RoundedImageView
,并将其nib加载到单元格的awakeFromNib
方法中:
@implementation InviteFriendsImageVIew
- (void)awakeFromNib
{
UINib *imageViewNib = [UINib nibWithName:@"RoundedImageView" bundle:nil];
RoundedImageView *imageView = [imageViewNib instantiateWithOwner:nil options:nil][0];
imageView.frame = // set frame here
[self addSubView:imageView];
self.roundedImageView = imageView;
}
您正在创建视图的某个实例,可能使用:
RoundedImageView *v = [[RoundedImageView alloc] initWithFrame:...];
这不使用NIB文件。您需要在NIB中加载以下内容:
UINib *nib = [UINib nibWithNibName:... bundle:nil];
NSArray *views = [nib instantiateWithOwner:... options:nil];
然后您可以获得RoundedImageView
的实例,如下所示:
RoundedImageView *v = views[0];
您是否已将插座连接到xib文件中的对象?+是的,我已将插座连接到两个xib中。然后您没有从NIB加载视图-显示加载代码。因此,您的asyncImageView是roundedImageView的子视图,并且还作为插座连接到rounedImageView?这就是问题所在-我没有任何加载代码。我只是在视图实现中使用了drawRect,就这样。但是drawRect被调用了,所以我认为NIB已经加载了。AsyncImageView不在表视图单元格中。它位于表视图单元格中的RoundedImageView中。好的,RoundedImageView上的
AsyncImageView
出口也在吗?是的,它是连接的。如果右键单击nib中的RoundedImageView
对象,可以看到连接在那里吗?如果右键单击文件的所有者,是否可以验证未建立连接?此外,是否可以发布单元格和RoundedImageView
的代码?这将有助于确定是否发生了其他事情。