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

Sco*_*ker 7 xcode objective-c iboutlet ios iboutletcollection

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

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

我该怎么做呢?

Cal*_*leb 24

使用IBOutletCollection将插座集合添加到视图控制器,如下所示:

@property (retain, nonatomic) IBOutletCollection(UIButton) NSMutableSet* buttons;
Run Code Online (Sandbox Code Playgroud)

这样您就可以将所有按钮连接到一个插座.该属性buttons将是一个包含所有按钮的NSMutableSet.您可以使用按钮的tag属性继续识别各个按钮.如果你想遍历所有按钮,也许是为了设置每个按钮的图像,这很方便:

for (UIButton *b in self.buttons) {
    b.imageView.image = [self imageForTag:b.tag];
}
Run Code Online (Sandbox Code Playgroud)

(您需要提供-imageForTag:方法为给定标记提供正确的图像,或者找到一些其他方式从标记映射到图像.)

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