现在我明白之前已经提出过这个问题,但答案并不令人满意。我的问题是我有一个带有视图的视图控制器和包含标签的东西。我为它添加了一堆代码,现在我正在扩展它。我现在有一个问题,我决定在我的界面添加另一个UIView,它有一个标签,该标签将像我在第一个UIView中的标签一样完全正常运行。我的问题是我不想进入我的视图控制器方法,每次操作第一个标签时都要添加另一行代码。无论如何,我可以将另一个标签链接到我为我的第一个标签设置的初始IBOutlet吗?或者我是否必须进入我的代码并在每次操作第一个标签时添加额外的代码行?
答案 0 :(得分:7)
这取决于您对该标签的要求。如果您希望以相同的方式更改标签的某些属性(例如,字体,文本颜色,对齐方式),那么您可以将两个标签放在IBOutletCollection
中并在您的集合中迭代查看控制器。
如果您希望标签中包含不同的数据,但其他属性相同,则您需要为该标签单独IBOutlet
。
您也可以将这两种技术结合起来。 e.g。
(接口)
@property (weak, nonatomic) IBOutlet UILabel *firstName;
@property (weak, nonatomic) IBOutlet UILabel *lastName;
@property (strong, nonatomic) IBOutletCollection(UILabel) NSArray *labels;
(实现)
- (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"];
}
答案 1 :(得分:6)
基本上简单的答案是否定的。无论您使用插座或插座集合或标签还是其他什么,您的代码中最终都会一个引用一个标签,并且另一个 >在您的代码中引用您的界面中另一个引用。您可以压缩表达式,以便轻松地循环访问这些引用(如不同答案所示),但基本事实是不可避免的,最终,“与...交谈”的唯一方法label是通过一个引用指向 标签和单独该标签的引用。
解决问题的唯一方法就是不要使用直接引用。例如,可以使用NSNotification将单个邮件 发送给多个收件人。因此,您可以拥有自己的一些UILabel子类的两个实例,并通过从视图控制器发布通知来“同时”向两个实例同时发送 - 然后通知将自动 传递给两个标签,因为你事先已经安排他们注册。
同样,另一种选择是您可以使用键值观察,以便视图控制器中的更改自动自动传播到两个标签,因为它们“观察”更改,这意味着它们被发送通知 - 实际上只是NSNotification的一种倒置形式。 (如果这是Mac OS X,你可以通过使用“绑定”来制作一个更简单,更安全的版本。)
但是,我实际上无法推荐这种方法。事实是,我们仍然生活在一个令人难以忍受的原始世界的基于文本的编程中,一次一行,一次一个命令,一次一个参考,我们必须咬紧牙关继续它。 / p>
答案 2 :(得分:0)
Swift 3,Xcode 8
此外,复制和粘贴对象维护IBActions,但不维护IBOutlets。
我希望这能回答你的问题,因为没有其他答案可以解决这个问题。