3

I've tried this class

https://github.com/autresphere/ASDepthModal

i want it to popup like it does but i want to be able to set the labels programmatically, since i need the to change depending on what day it is. I'm using storyboard, so i've created a .xib and uiview.h and uiview.m. In my main UIViewController i have:

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

in my .xib i have set the file owner to my uiview class, this create a problem: NSUnknownKeyException When i set the uiiew inside my .xib to my uiview class the application will load and i can open it just like it should, but i'm not able to change the state of the label programmatically? I'm complety lost here!

4

3 回答 3

3

通常来说,UIViews 无权访问 IBOutlets。Apple 类型的预期 xib 仅分配给 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 属性来检索您的标签。您可以在 subviews 属性中找到您的标签:

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

于 2013-05-06T00:09:09.880 回答
2

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

感谢帮助过我的人:)

于 2013-05-19T13:55:36.783 回答
1

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

于 2013-05-05T23:13:39.383 回答