【问题标题】:Can I connect multiple objects with different tags to the same IBOutlet?我可以将具有不同标签的多个对象连接到同一个 IBOutlet 吗?
【发布时间】:2011-12-19 16:23:46
【问题描述】:

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

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

我该怎么做?

【问题讨论】:

    标签: ios objective-c xcode iboutlet iboutletcollection


    【解决方案1】:

    使用 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: 方法来为给定标签提供正确的图像,或者找到其他方法将标签映射到图像。)

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

    【讨论】:

    • 是的,准确!我刚刚尝试过这个,并且 NSLog'ed 了数组的计数,并且它完美地连接了按钮......唯一我不知道该怎么做的就是使用它来更改这个按钮图像?我该怎么做代码明智?谢谢!
    • 使用 IBOutletCollection 设置按钮的图像与使用普通的旧 IBOutlet 没有什么不同,只是您首先必须从集合中获取每个按钮。我在上面添加了一点 sn-p 可能会有所帮助。
    【解决方案2】:

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

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

    -

    class ViewController2: UIViewController {
    
    
        @IBOutlet var collection:[UIView]!
    
    
        override func viewDidLoad() {
            super.viewDidLoad()
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-12
      • 1970-01-01
      • 1970-01-01
      • 2020-09-24
      • 2016-12-08
      相关资源
      最近更新 更多