32

我想用我在 Interface Builder 中的一堆 UIImageViews 制作一个数组。而不是 20 或 30

IBOutlet UIImageView *img1;

并以这种方式将它们链接起来,然后将它们放入一个数组中,有没有办法声明一个 IBOutlet UIImageViews 数组?

只是这样我的头文件中没有太多声明。

4

5 回答 5

45

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

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

现在您可以在 Interface Builder 中将多个对象粘贴到插座中,加载界面时将为您创建数组。

于 2011-01-12T09:52:31.000 回答
4

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

于 2011-01-14T20:51:28.573 回答
2

Swift 3 及以上版本:

@IBOutlet var stuckLabels: [UIImageView]
于 2017-02-22T14:03:01.513 回答
2

这是更简单的方法。

按照以下步骤创建一个插座阵列并将其与 IB Elements 连接:

  • 创建一个 IBOutlets 数组
  • 在 Storyboard ViewController 界面中添加多个 UIElement(视图)
  • 选择 ViewController(在故事板中)并打开连接检查器
  • 连接检查器中有“Outlet Collections”选项(您将在那里看到一系列插座)
  • 与您的界面元素连接

-

class ViewController2: UIViewController {


    @IBOutlet var collection:[UIView]!


    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

在此处输入图像描述

于 2017-11-03T09:45:53.590 回答
-4

不幸的是,没有,但是您可以将所有声明保留在一行中:

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

另一种选择(可能是最好的,因为你有这么多)是以编程方式创建它们并将它们存储在一个数组中,然后将它们从你的视图控制器类添加到视图中,使用,

[self.view addSubview:img];

另外,请记住,如果元素是静态的(如背景元素),并且您实际上不需要访问它们,则不需要为每个元素声明出口;您可以将它们添加到 nib 文件中并忘记它们。

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

-(IBAction) buttonPressed:(id)sender {
    UIButton *button = (UIButton *)sender;
    // method guts
    // stuff with button -- access tag, disable, etc
}
于 2010-12-05T00:19:19.027 回答