Ios 重用UI(xib文件)
在我的应用程序中,我有两个屏幕-第一个显示用户配置文件,第二个-编辑配置文件信息。它们是相似的。我已经完成了第一个屏幕的xib文件Ios 重用UI(xib文件),ios,objective-c,xcode,cocoa-touch,Ios,Objective C,Xcode,Cocoa Touch,在我的应用程序中,我有两个屏幕-第一个显示用户配置文件,第二个-编辑配置文件信息。它们是相似的。我已经完成了第一个屏幕的xib文件 在第二个屏幕上重复使用它的最佳方式是什么?您可以使用UITextFields(而不是逻辑上用于显示的UILabels)更改外观,然后打开/关闭启用。作为一个简单的例子: 显示: self.textField.borderStyle = UITextBorderStyleNone; self.textfield.enabled = NO; 编辑: self.
在第二个屏幕上重复使用它的最佳方式是什么?您可以使用
UITextField
s(而不是逻辑上用于显示的UILabel
s)更改外观,然后打开/关闭启用。作为一个简单的例子:
显示:
self.textField.borderStyle = UITextBorderStyleNone;
self.textfield.enabled = NO;
编辑:
self.textField.borderStyle = UITextBorderStyleBezel;
self.textfield.enabled = YES;
当然,除了这些基本功能外,您还可以在外观方面做更多的工作。在Xcode中:转到文件>复制
然后将复制的xib命名为“editProfile”这将提供第一个xib的副本,您可以根据需要进行调整。您的意思是进入视图控制器的编辑模式并重用您创建的那些元素吗
您应该将相关元素封装为自定义视图类。您可以通过使用代码而不仅仅是XIB创建视图来解决这个问题,我建议您这样做
但是,如果您希望使用xib,您可以创建一个模型来模拟您想要重用的东西。然后在视图控制器中调用如下代码:
UIView* aView = [UIView alloc] initWithFrame .....];
[[NSBundle mainBundle] loadNibNamed:@"MyReusableComponent" owner:aView options:nil];
UILabel* someLabel = aView.injectedLabel; //this is alive after loading the xib
[self.view addSubView:aView];
创建xib时,需要将文件所有者设置为一个类,该类将响应将被注入的属性的setter。(例如你的新视图类)。这样你就可以把参考资料联系起来
有关更多信息,请查看苹果公司从xib加载表格单元格的示例-这是相同的技术。当您加载一个xib并指定所有者时,它将把来自xib的值注入所有者,在本例中是一个自定义视图
+1表示代码,而不是NIB;我从来没有发现过NIB在长期甚至中期内弊大于利的情况。NIB非常有用,特别是在长期来看,但你必须知道在哪里停止,以及如何正确划分它们之间的UI。@valentin-你是对的,如果这是你的偏好,它们当然可以正确地完成@西蒙:它们很适合学习。一旦事情变得更复杂,我更喜欢代码。我第一次看到他们时就被吓了一大跳@老实说,我甚至不认为它们有利于学习。他们所做的只是推迟你学会正确地做这件事的时间,在没有教你如何解决问题的情况下制造问题。