将两个标签连接到一个sockets

现在我明白这个问题以前曾经有人问过,但答案并不令人满意。 我的问题是,我有一个视图控制器的视图和东西,包括一个标签。 我添加了一堆代码,现在我正在扩展它。 我现在有一个问题,我已经决定添加另一个UIView到我的界面,它有一个标签,该标签将像我在第一个UIView中的标签一样运行。 我的问题是,我不想在我的视图控制器方法去每次我操纵第一个标签添加另一行代码。 无论如何,我可以将另一个标签链接到我为我的第一个标签设置的初始IBOutlet上吗? 或者我必须去我的代码,并添加一个额外的代码行每次操纵第一个标签?

基本上,简单的答案是否定的。 无论您使用sockets还是sockets集合或标签,您最终都会在您的代码中为您的界面中的一个标签提供一个引用,并且在您的代码中另外引用另一个引用。 你可以压缩你的expression方式,以便通过这些引用来循环(正如不同的答案中所build议的那样),但是基本的事实是不可避免的,最终,与标签“交谈”的唯一方法是通过一个引用指向那个标签和那个标签。

解决这个问题的唯一方法就是不要直接使用引用。 例如,一条消息可以通过使用NSNotification发送给多个收件人。 所以你可以拥有你自己的一些UILabel子类的两个实例,并通过从你的视图控制器发布一个通知同时 “喊”两个实例 – 通知然后自动传递给两个标签,因为你已经事先安排他们注册。

同样,另一种select是,您可以使用键值观察,以便您的视图控制器中的更改自动传播到两个标签,因为他们“观察”的变化,这意味着他们发送通知 – 实际上只是NSNotification的反转forms。 (如果这是Mac OS X,您可以使用“绑定”来使这个安排更简单,更安全的版本)。

但是,我真的不能真正推荐这种方法。 事实上,我们仍然生活在一个原始的基于文本的编程世界,一次一行,一次一个命令,一次一个引用,我们必须咬紧牙关,继续前进。

这取决于你想要做的标签。 如果您想要以同样的方式更改标签的某些属性(例如,字体,文本颜色,alignment方式),那么您可以将这两个标签放在IBOutletCollection并遍历视图控制器中的集合。

如果要在标签中使用不同的数据,但其他属性相同,则需要为该标签使用单独的IBOutlet

你也可以结合这两种技术。 例如

(接口)

 @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"]; } 

Swift 3,Xcode 8

  • 用对象创build一个原型单元格
  • 然后添加另一个原型
  • 它将复制第一个原型单元格中的对象。
  • 新对象将连接到相同的IBOutlet

此外,复制和粘贴对象保持IBActions,但不保留IBOutlets。

我希望这回答你的问题,因为没有其他的答案有这个工作。