【问题标题】:Load UIView with Nib and UIView class使用 Nib 和 UIView 类加载 UIView
【发布时间】:2013-04-29 16:40:58
【问题描述】:

我试过这门课

https://github.com/autresphere/ASDepthModal

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

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

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

【问题讨论】:

    标签: ios xcode uiview label xib


    【解决方案1】:

    一般来说,UIView 无法访问 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 属性来检索您的标签。您可以在 subviews 属性中找到您的标签:

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

    【讨论】:

    • 我不明白如何实现这个?我有一个 ViewController,界面构建器位于我的主故事板中。我有一个 UIView 类应该控制我的 2 个 .xib 的?一个 .xib 作为主屏幕,另一个 xib 控制我的标签?
    【解决方案2】:

    实际上让这个工作。我采取了错误的方法。我发现创建视图并在单击按钮时使用背景图像和标签填充它更简单。在 UI 设计师中做这件事会很简单,但这实际上并不难。

    感谢帮助我的人:)

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2011-02-08
        • 1970-01-01
        • 1970-01-01
        • 2011-05-05
        • 2014-09-11
        • 2011-03-22
        • 2012-10-13
        • 2013-03-02
        相关资源
        最近更新 更多