使用Nib和UIView类加载UIView

3

我已经尝试过这个类

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中的uiview设置为我的uiview类时,应用程序将加载,我可以像应该一样打开它,但我无法通过编程更改标签的状态?我完全迷失了!
3个回答

3
通常情况下,UIView没有访问IBOutlets的权限。苹果公司实际上是想让xibs仅分配给UIViewControllers的。
然而,你可以通过以下两种方式之一从xib中加载视图:
1)创建另一个xib以在你的UIViewController中使用。将File's Owner设置为你的视图控制器,并将视图类的类名设置为你的自定义视图类。在界面构建器中,这在“自定义类”下。你可以将视图设置为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];

我不明白如何实现这个? 我有一个 ViewController,它的界面构建器在我的主故事板中。 我有一个 UIView 类应该控制我的 2 个 .xib 文件? 一个 .xib 用于主屏幕,另一个 .xib 用于控制我的标签? - rostgaard

2

实际上我已经让它工作了。我采取了错误的方法。我发现当按钮被点击时,创建视图并用背景图像和标签填充它更简单。虽然在UI设计师中完成这个任务也很容易,但事实上这并不难。

感谢帮助我的人们 :)


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接