如何从一组对象中制作IBOutlets?

时间:2010-12-05 00:16:11

标签: ios iphone interface-builder iboutlet iboutletcollection

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

IBOutlet UIImageView *img1;

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

因此我的头文件中没有这么多声明。

5 个答案:

答案 0 :(得分:43)

有可能,它被称为 outlet collection 。这是定义出口集合的方法:

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:2)

Swift 3及以上:

@IBOutlet var stuckLabels: [UIImageView]

答案 3 :(得分:1)

这是更简单的方法。

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

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

-

class ViewController2: UIViewController {


    @IBOutlet var collection:[UIView]!


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

enter image description here

答案 4 :(得分:-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
}