我创建了一个xib。 xib的文件所有者是一个名为PackageTrackingListViewElement
的自定义类的集合。 PackageTrackingListViewElement
具有名为contentView
的IBOutlet属性等。界面构建器中的多个视图连接到名为PackageTrackingListViewElement
的自定义类的IBOutlet属性。
我尝试从xib初始化一个对象。
PackageTrackingListViewElement *element2 = [[[NSBundle mainBundle] loadNibNamed:@"PackageTrackingListViewElementXib" owner:nil options:nil] objectAtIndex:0];
[element2.labelDate setText:@"12/14/15"];
[element2.labelLocation setText:@"Berkeley, California"];
在此之后,我将element2
对象添加到UIStackView。
我应该在 loadNibNamed
中设置文件所有者,以便我不会收到xib的所有者不符合键值的错误我试图访问的属性?
我的错误是[<UIStackView 0x165ddc80> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key contentView.'
当我尝试将stackView设置为xib的所有者时。我知道这当然是错的,但我不能将尚未创建的对象设置为自己的所有者。我不明白该怎么做。
答案 0 :(得分:3)
唉,我明白了。非常感谢Instantiating a UIView from a XIB file with itself as the file's owner?
谢谢nebs
<强> PackageTrackingListViewElement.h 强>
#import <UIKit/UIKit.h>
@interface PackageTrackingListViewElement : UIView
@property (nonatomic,strong) IBOutlet UILabel *labelLocation;
- (instancetype)initFromNib;
@end
<强> PackageTrackingListViewElement.m 强>
#import "PackageTrackingListViewElement.h"
@implementation PackageTrackingListViewElement : UIView
- (instancetype)initFromNib {
return [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self.class) owner:nil options:nil] firstObject];
}
@end
然后你可以简单地做:
PackageTrackingListViewElement *myView = [[PackageTrackingListViewElement alloc] initFromNib];
[myView.labelLocation setText:@"text"]; //access properties
通过在上面的链接中使用实例化过程,我得到了xib的实例化。我将xib的文件所有者设置为空(NSObject),而是将根视图(通过选择xib中的视图)设置为PackageTrackingListViewElement并将所有出口连接到该视图。