我有一个XYZViewController
(故事板中的简单UIViewController),它加载了默认视图。我有一个XYZView
类型,我在UIView
文件中有.xib
。
在XYZViewController类中,我将XYZView
的属性定义为IBOutlet
。棘手的是我不知道如何将这个属性连接到storyboard(或.xib文件中的UIVIew)中的UIViewController,以便 -
(我的问题听起来很狡猾和/或我可能没有正确的方法来解释它,但这是我能做到的最好的。)
编辑:进一步澄清可能会更容易。我只是不想自己说:
XYZView *xyzView = [[XYZView alloc] initWithFrame...];
或
[self.view addSubview:xyzView];
也许这有帮助。
答案 0 :(得分:4)
好的,从我告诉你的内容来看......
<强> XYZViewController 强>
代码在XYZViewController.h and .m
个文件中。
.storyboard文件
在storyboard文件中,您有一个视图控制器,您已将子类设置为XYZViewController
。
.xib文件
在xib文件中,您有一个已定义为子类XYZView
的视图。
右?
我猜你所做的是以下......
在.xib文件中,您已列出XYZView
并在其上放置标签,按钮等。
视图控制器由故事板创建。但是现在你要将标签和按钮附加到它上面。
右?
如果这一切都是正确的,那么你有几个选择。
最简单的选项
删除xib文件。除非在应用程序的多个位置使用XYZView
(即在不同的视图控制器内),否则您应该在故事板中完成所有这些布局。将按钮和标签添加到故事板中的XYZViewController
。
这将允许您连接IBOutlets和IBActions,它将全部正常工作,因为故事板正在创建,然后设置插座和操作。
下一个选项
因为您已在xib文件中创建了视图,所以必须从代码中的xib文件加载它,然后将其添加到视图控制器。
像...一样的东西。
- (void)viewDidLoad
{
[super viewDidLoad];
self.xyzView = [[[NSBundle mainBundle] loadNibNamed:@"XYZView" owner:self options:nil] objectAtIndex:0];
[self.view addSubview:xyzView];
}
然后你可以做像...这样的事情。
self.xyzView.someLabel.text = @"This is the text";
您仍然无法连接插座和操作,但这是因为视图控制器不是由xib创建的。它是由故事板创建的。
这可能会让一切变得混乱。我真的只建议在单独的xib中创建一个视图,如果它是你反复使用的东西(比如5星评级视图或其他东西)。
你绝对不能做什么
好吧,我想我可能已经想到你在做什么。在故事板中,您已将视图的子类设置为XYZView
,并且您希望它能够获取您在xib文件中为XYZView
定义的标签和按钮等...
这绝对不会奏效。
故事板和xib是完全独立的对象。如果要一起使用它们,则代码涉及从笔尖加载视图,然后将其添加到在故事板中创建的视图控制器。