Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 重用UI(xib文件)_Ios_Objective C_Xcode_Cocoa Touch - Fatal编程技术网

Ios 重用UI(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.

在我的应用程序中,我有两个屏幕-第一个显示用户配置文件,第二个-编辑配置文件信息。它们是相似的。我已经完成了第一个屏幕的xib文件


在第二个屏幕上重复使用它的最佳方式是什么?

您可以使用
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-你是对的,如果这是你的偏好,它们当然可以正确地完成@西蒙:它们很适合学习。一旦事情变得更复杂,我更喜欢代码。我第一次看到他们时就被吓了一大跳@老实说,我甚至不认为它们有利于学习。他们所做的只是推迟你学会正确地做这件事的时间,在没有教你如何解决问题的情况下制造问题。