Iphone 如何在没有';的情况下以编程方式访问NIB中的UI元素;布线';他们?
我正在考虑编写一些助手函数,以便更轻松地对iPhone NIB中的UI元素进行简单更改。主要-我想通过Interface Builder中的名称访问UILabel或其他元素。这可能吗?有更聪明的方法吗 例子 假设我想制作一个超级简单的iPhone应用程序,显示“Hello World”。我启动一个新项目,然后打开NIB,将UILabel拖到我的视图中,并给它一个名为“LblMain”。现在,假设我已经包含了handy helper函数,我想为标签分配一些新文本,如下所示:Iphone 如何在没有';的情况下以编程方式访问NIB中的UI元素;布线';他们?,iphone,interface-builder,nib,Iphone,Interface Builder,Nib,我正在考虑编写一些助手函数,以便更轻松地对iPhone NIB中的UI元素进行简单更改。主要-我想通过Interface Builder中的名称访问UILabel或其他元素。这可能吗?有更聪明的方法吗 例子 假设我想制作一个超级简单的iPhone应用程序,显示“Hello World”。我启动一个新项目,然后打开NIB,将UILabel拖到我的视图中,并给它一个名为“LblMain”。现在,假设我已经包含了handy helper函数,我想为标签分配一些新文本,如下所示: [helper set
[helper setText:@"Hello World" forLabel:@"LblMain"];
-或
现在-诀窍是我没有添加:
IBoutlet UILabel *ObjLblMain;
在.h文件中的任何地方-我只是动态访问该标签-这不是很好吗
现在,对于简单的应用程序,要添加更多的标签或图像,我可以将它们拖到我的NIB中,在该元素的inspector窗口中为它们指定名称,然后立即在代码中访问它们,而无需在.h文件中添加它们
动机
- 基本上,我很沮丧,因为我必须把笔尖上的每一个元素都连接起来——我宁愿避免很多口吃和簿记
- 我可以给一个设计一些命名约定,它们可以生成一个NIB,而无需熟悉实现
NSObject
上的属性。加载对象后,名称100%不可访问,我一直认为这也很奇怪
可访问的是“标记”,如果您确实希望访问元素而不定义出口,则可以设置(仅限整数)“标记”值,然后在保存标记元素的superview中调用
viewWithTag:
传入相同的整数。不要忘了默认值是“0”,所以请使用其他内容。我认为您可以尝试在一些外部编辑器中以XML形式打开xib,并查看编译器如何看待它,然后您可能会以相同的方式通过元素标记来完成:假设您有一个名为“yourView”的UIView xib文件,其中有一个UILabel,您希望在不进行布线的情况下访问它
UILabel*yourlabel=(UILabel*)[yourView视图WithTag:100];
//你想怎么做就怎么做。
对于iOS6+,您可以使用restorationId而不是标记,以使其更“可读”,例如,您可以在nib文件和restorationId中设置相同的名称 如果不想将nib中的所有插座链接到viewcontroller,您仍然可以通过在当前视图子视图树中搜索来访问它们。请注意,子视图排列是一棵树(与您可以在nib文件中看到的树相同),因此如果您有嵌套视图,则需要执行一些递归 例如:
UIButton *nibButtonView = nil;
for (UIView *view in [self.view subviews]){
if ([view.restorationIdentifier isEqualToString:@"myNibButtonView"]){
nibButtonView = (UIButton *)view;
}
}
[nibButtonView setTitle:@"Yeah" forState:UIControlStateNormal];
在nib文件中,您应该有一个restorationId等于“myNibButtonView”的按钮,您可以在identity inspector(实用程序的第三列)中找到restorationId文本字段
如果你有大量的销售点,你可以使用它,但你不想将它们全部链接起来。我知道我以前看到过一些关于这方面的参考资料,但我完全无法放置/重新找到它。谢谢嗯,关于向代码发送类似“名称”的内容的无害方式,有什么建议吗?比如在“可访问性”中添加一个“提示”,然后在运行时将其清除——或者类似的事情?我可以将标签的.xib文件预处理到提示中。8个月后,我决定挖掘一下。这不是一个完整的解决方案,但一旦您指向已标记为可访问的对象,您就可以通过“[lbl accessibilityLabel];”读取其标签,这可能是某人的一个开始。
UIButton *nibButtonView = nil;
for (UIView *view in [self.view subviews]){
if ([view.restorationIdentifier isEqualToString:@"myNibButtonView"]){
nibButtonView = (UIButton *)view;
}
}
[nibButtonView setTitle:@"Yeah" forState:UIControlStateNormal];