我有一个名为FeedView的视图,由FeedViewController处理。
我还有一个名为“NearestStore”的XIB,它由一个名为“NearestStoreViewController”的视图控制器处理。 NearestStore xib有标签,按钮等。在视图控制器中,我有连接到NearestStore.xib中子视图的插座。
NearestStore继承自UIButton(因此处理点击事件更容易)。
在FeedViewController.xib上我有一个UIButton,它已被设置为NearestStore类型。
到目前为止一切顺利。这是在我的FeedViewController上:
__weak IBOutlet NearestStoreButton *btn_nearestStore;
插座在xib上连接到插座。
NearestStoreViewController有几个子视图出口,如:
@property (nonatomic, weak) IBOutlet UILabel *lbl_distance;
@property (nonatomic, weak) IBOutlet UIImageView *img_distance;
出于某种原因,在我的FeedViewController上,对btn_nearestStore的引用很好,但所有子视图都是nil。
例如:
btn_nearestStore.lbl_distance
是零
我错过了什么?
答案 0 :(得分:3)
这听起来就像系统应该工作一样。使用xibs创建自定义小部件并不容易。
您的FeedViewController将为相应的FeedView执行xib加载。
在此加载过程中,它会注意到NearestStoreButton子视图。因此,它使用NearestStoreButton类上的- (id)initWithCoder:
消息创建了这样的视图。它不会神奇地注意到相应的.xib和相应的viewController。
如果需要在xib中使用xib,则需要手动为所有子视图加载。请记住,您需要为这些辅助xib创建/使用适当的所有者(视图控制器)。
答案 1 :(得分:0)
很难从您的描述中看出来,但这听起来像是加载的NearestStoreButton XIB的“所有者”的问题。加载NIB时,您将为加载程序提供一个所有者,并为其所有者提供大多数出口绑定和操作。如果您使用NearestStoreButton
加载UINib
,那么当您致电instantiateWithOwner:options:
时,请确保将通行证应设置为所有者的对象。
答案 2 :(得分:0)
你什么时候打电话给插座?如果您尝试在视图的initWithCoder
方法中访问该属性,则无法保证该对象已实例化。
如果您在视图中使用awakeFromNib
方法访问您的媒体资源,那么您应该可以获得它。例如,我有一个自定义视图,我的代码看起来像这样:
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
//Don't style the subviews in here since they won't be initialized
}
return self;
}
- (void)awakeFromNib
{
[super awakeFromNib];
[self styleViews];
}
- (void)styleViews
{
//access my properties and style them in here
}
答案 3 :(得分:0)