使用Nib和UIView类加载UIView

时间:2013-05-05 23:08:31

标签: ios xcode uiview label xib

我试过这个课程

https://github.com/autresphere/ASDepthModal

我希望它像它一样弹出,但我希望能够以编程方式设置标签,因为我需要根据它的日期进行更改。 我正在使用storyboard,所以我创建了一个.xib和uiview.h以及uiview.m。在我的主要UIViewController中我有:

xibContents = [[NSBundle mainBundle] loadNibNamed:@".xib" owner:self options:nil];
testView = [xibContents lastObject];

在我的.xib中我已将文件所有者设置为我的uiview类,这会产生一个问题:NSUnknownKeyException 当我将.xib中的uiiew设置为我的uiview类时,应用程序将加载,我可以像它应该打开它,但我无法以编程方式更改标签的状态?我在这里迷失了!

3 个答案:

答案 0 :(得分:3)

通常来说,UIViews无法访问IBOutlets。 Apple类的预期xib只能分配给UIViewControllers。

但是,您可以通过两种方式从xib加载视图:

1)创建一个额外的xib以在UIViewController中使用。将文件所有者设置为视图控制器,并将视图的类名设置为自定义视图类。在界面构建器中,这是在“自定义类”下。您可以将视图设置为IBOutlet,当UIViewController加载xib并将其自身设置为所有者时,iOS将创建自定义类的实例(就像您在上面尝试过的那样,但只能在控制器类中)

2)在UIView类中加载一个xib,并将self设置为结果对象:

- (id)init {
    self = [super initWithFrame:CGRectMake(0, 0, 1024, 352)];

    if (self) {
        NSArray* nib = [[NSBundle mainBundle] loadNibNamed:@"TCSNumberKeyPad" owner:self options:nil];
        [[nib objectAtIndex:0] setFrame:CGRectMake(0, 0, 1024, 352)];
        self = [nib objectAtIndex:0];
    }

    return self;
}

在任何一种情况下,您都需要通过代码而不是IBOutlet属性检索标签。您可以在子视图属性中找到您的标签:

UILabel* myLabel = [self.subviews objectAtIndex:0];

答案 1 :(得分:2)

实际上这是有效的。我采取了错误的做法。我发现只需创建视图并在单击按钮时用背景图像和标签填充它就更简单了。在UI设计师中这样做很简单,但实际上并不难。

感谢帮助我的人们:)

答案 2 :(得分:1)

文件的所有者应该是视图控制器,而不是视图本身。视图可以有标签的出口。该视图应设置为您的笔尖中的自定义类。