Mil*_*ilo 0 objective-c uiview ios
现在我明白这个问题之前已被问过,但答案并不令人满意.我的问题是我有一个带有视图的视图控制器和包含标签的东西.我为它添加了一堆代码,现在我正在扩展它.我现在有一个问题,我决定在我的界面添加另一个UIView,它有一个标签,该标签将像我在第一个UIView中的标签一样完全正常运行.我的问题是我不想进入我的视图控制器方法,每次操作第一个标签时都要添加另一行代码.无论如何,我可以将另一个标签链接到我为我的第一个标签设置的初始IBOutlet吗?或者每次操作第一个标签时,我是否必须进入我的代码并添加额外的代码行?
这取决于你想对该标签做什么.如果您希望以相同的方式更改标签的某些属性(例如,字体,文本颜色,对齐方式),则可以将两个标签放在一个IBOutletCollection并在视图控制器中迭代该集合.
如果您希望标签中包含不同的数据,但其他属性相同,那么您需要IBOutlet为该标签单独添加.
您也可以将这两种技术结合起来.例如
(接口)
@property (weak, nonatomic) IBOutlet UILabel *firstName;
@property (weak, nonatomic) IBOutlet UILabel *lastName;
@property (strong, nonatomic) IBOutletCollection(UILabel) NSArray *labels;
Run Code Online (Sandbox Code Playgroud)
(实现)
- (void)viewDidLoad {
[super viewDidLoad];
for (UILabel *aLabel in self.labels) {
// Set all label in the outlet collection to have center aligned text.
[aLabel setTextAlignment = NSTextAlignmentCenter;
}
[self.firstName setText:@"First Name"];
[self.lastName setText:@"Last Name"];
}
Run Code Online (Sandbox Code Playgroud)
基本上简单的答案是否定的.无论您是使用插座或电源插座的集合或标签或什么的,你最终有一个在你的代码来引用一个标签,在你的界面,和另一个在代码中引用的另一个界面中的任何引用.你可以压缩你的表达方式,以便顺便通过这些引用(如不同的答案所示),但基本的事实是不可避免的,最终,与"标签""谈话"的唯一方法是通过一个引用仅指向该标签和该标签.
解决这个问题的唯一方法就是不要使用直接引用.例如,可以使用NSNotification 将单个邮件发送给多个收件人.因此,您可以拥有自己的一些UILabel子类的两个实例,并通过从视图控制器发布通知来同时 "呼喊"两个实例- 然后通知会自动传递到两个标签,因为您事先已将它们安排到注册它.
类似地,另一个替代方案是您可以使用键值观察,以便视图控制器中的更改自动传播到两个标签,因为它们"观察"更改,这意味着它们被发送通知 - 实际上只是NSNotification的反转形式.(如果这是Mac OS X,你可以通过使用"绑定"来制作一个更简单,更安全的版本.)
但是,我实际上无法推荐这种方法.事实是,我们仍然生活在一个极其原始的基于文本的编程世界中,一次一行,一次一个命令,一次一个参考,我们必须咬紧牙关继续下去.
| 归档时间: |
|
| 查看次数: |
5090 次 |
| 最近记录: |