ios - 使用 Nib 和 UIView 类加载 UIView

标签 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 类时,应用程序将加载并且我可以像它应该的那样打开它,但我无法以编程方式更改标签的状态?我完全迷失在这里!

最佳答案

通常来说,UIViews 没有访问 IBOutlets 的权限。 Apple 打算将 xib 仅分配给 UIViewControllers。

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

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

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 属性来检索您的标签。您可以在 subview 属性中找到您的标签:

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

关于ios - 使用 Nib 和 UIView 类加载 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16390049/

相关文章:

iphone - 转到应用程序中的第一个 View Controller

iphone - 为什么 self.bounds.size.height 没有考虑这段代码中的 UINavigationView 导航栏?

ios - UIView 中的 Swift Share 表

ios - AFNetworking,使用正确的 token 获取 401

ios - 在 CAKeyframeAnimation 之后定位 UIView 会导致显示故障

ios - 如何可靠地阻止 Objective-C 中的重复动画调用?

ios - 水平居中多个 UIView

ios - 配置文件 - iOS

ios - 在 ios 中将图像转换为卡通

ios - AWS Pod 库的迁移