如何使IBOutlets脱离对象数组?

我想用Interface Builder中的一堆UIImageView来创build一个数组。 而不是20或30

IBOutlet UIImageView *img1; 

并链接他们,然后把它们放入一个数组,有没有办法来声明一个IBOutlet UIImageViews的数组?

只是所以我没有在我的头文件中有这么多的声明。

这是可能的,它被称为出口收集 。 这是定义一个sockets集合的方法:

 @property(retain) IBOutletCollection(UIImageView) NSArray *images; 

现在,您可以将多个对象粘贴到Interface Builder中的sockets中,接口加载时将为您创buildarrays。

我在这里稍微晚一些,但是在IB中设置每个ImageView的标签属性可能更容易,然后像[some_superview viewWithTag:tag]一样访问它们,而不是为每个ImageView保留一个单独的句柄。

Swift 3及以上:

 @IBOutlet var stuckLabels: [UIImageView] 

这是更简单的方法来做到这一点。

按照以下步骤创build一个连接IB元素的socketsarrays:

  • 创build一个IBOutlets数组
  • 在Storyboard ViewController界面中添加多个UIElements(Views)
  • selectViewController(在故事板)并打开连接检查器
  • 在连接检查员有选项“出口收集”(你会看到一系列的网点)
  • 连接,如果你的界面元素

 class ViewController2: UIViewController { @IBOutlet var collection:[UIView]! override func viewDidLoad() { super.viewDidLoad() } } 

在这里输入图像说明

没有,不幸的是,你可以保留所有的声明在一行:

 IBOutlet UIImageView *img1, *img2, *img3, *img4; 

另一个选项(可能是最好的,因为你有这么多)将编程创build它们,并将它们存储在一个数组,然后将它们添加到您的视图控制器类的视图,使用每个,

 [self.view addSubview:img]; 

此外,请记住,如果元素是静态的(如背景元素),而您实际上不需要访问它们,则不需要为每个元素声明网点; 你可以把它们添加到nib文件中,忘掉它们。

UIButton实例也一样。 如果您不需要更改button的任何内容,则可以从调用的方法访问它,如下所示:

 -(IBAction) buttonPressed:(id)sender { UIButton *button = (UIButton *)sender; // method guts // stuff with button -- access tag, disable, etc }