Ios 我可以将具有不同标记的多个对象连接到同一个IBOutlet吗?

Ios 我可以将具有不同标记的多个对象连接到同一个IBOutlet吗?,ios,objective-c,xcode,iboutlet,iboutletcollection,Ios,Objective C,Xcode,Iboutlet,Iboutletcollection,我在Interface Builder的一个视图中有30个按钮。每个标签在100001和100030之间有一个不同的标签。我发现很容易对每个按钮使用相同的操作,按下时传递每个按钮的标记,并使用代码决定加载哪个级别 我想将所有按钮连接到一个IBOutlet,但让每个按钮根据用户保存的数据和按钮的标记加载不同的图像 如何执行此操作?使用iOutletCollection向视图控制器添加插座集合,如下所示: @property (retain, nonatomic) IBOutletCollectio

我在Interface Builder的一个视图中有30个按钮。每个标签在100001和100030之间有一个不同的标签。我发现很容易对每个按钮使用相同的操作,按下时传递每个按钮的标记,并使用代码决定加载哪个级别

我想将所有按钮连接到一个IBOutlet,但让每个按钮根据用户保存的数据和按钮的标记加载不同的图像


如何执行此操作?

使用iOutletCollection向视图控制器添加插座集合,如下所示:

@property (retain, nonatomic) IBOutletCollection(UIButton) NSMutableSet* buttons;
这将允许您将所有按钮连接到一个插座。属性
按钮
将是一个包含所有按钮的NSMutableSet。您可以使用按钮的
标记
属性继续识别各个按钮。如果您希望遍历所有按钮,可能需要设置每个按钮的图像,则此功能非常方便:

for (UIButton *b in self.buttons) {
    b.imageView.image = [self imageForTag:b.tag];
}
(您需要提供
-imageForTag:
方法来为给定的标记提供正确的图像,或者找到从标记映射到图像的其他方法。)


当然,如果您已经知道所有按钮的标记值范围,并且注意使包含所有按钮的视图中的标记唯一,那么也可以使用
-viewWithTag:
单独获取每个按钮。这可能不如您在上述outlet集合中创建整套按钮的速度快,但这确实意味着要维护的东西少了一件。

按照以下步骤创建一个outlet阵列,并将其与IB元素连接:

  • 创建一个IBOutlets数组
  • 在序列图像板ViewController界面中添加多个UIElements(视图)
  • 选择ViewController(在故事板中)并打开连接检查器
  • 连接检查器中有“插座集合”选项(您将在那里看到插座阵列)
  • 连接接口元素
-


是的,非常正确!我刚试过,记录了数组的计数,它完美地连接了按钮。。。我唯一不知道怎么做的就是用这个来改变这个按钮图像?在代码方面我该怎么做?谢谢使用IBOutletCollection设置按钮的图像与使用普通的旧IBOutlet没有什么不同,只是首先必须从集合中获取每个按钮。我在上面添加了一个小片段,这可能会有所帮助。
class ViewController2: UIViewController {


    @IBOutlet var collection:[UIView]!


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