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

时间:2011-12-19 16:23:46

标签: ios objective-c xcode iboutlet iboutletcollection

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

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

我该怎么做?

2 个答案:

答案 0 :(得分:24)

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

@property (retain, nonatomic) IBOutletCollection(UIButton) NSMutableSet* buttons;

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

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

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

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

答案 1 :(得分:0)

按照以下步骤创建一个出口阵列,并将其与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