objective-c - Interface Builder 中的 IBOutletCollection 集排序

标签 objective-c ios xcode interface-builder iboutlet

我正在使用 IBOutletCollections 对类似 UI 元素的多个实例进行分组。特别是我将一些 UIButtons(类似于问答游戏中的蜂鸣器)和一组 UILabels(显示分数)分组。我想确保按钮正上方的标签会更新分数。我认为通过索引访问它们是最容易的。不幸的是,即使我以相同的顺序添加它们,它们也不总是具有相同的索引。 Interface Builder 中有没有办法设置正确的顺序。

最佳答案

编辑:一些评论者声称,最新版本的 Xcode 返回 IBOutletCollections 以建立连接的顺序。其他人声称这种方法在 Storyboard中对他们不起作用。我自己没有对此进行测试,但如果您愿意依赖未记录的行为,那么您可能会发现我在下面提出的显式排序不再需要。


不幸的是,似乎没有任何方法可以控制 IB 中 IBOutletCollection 的顺序,因此您需要在数组加载后根据 View 的某些属性对其进行排序.您可以根据 View 的 tag 属性对 View 进行排序,但在 IB 中手动设置标签可能相当乏味。

幸运的是,我们倾向于按照我们想要访问它们的顺序排列 View ,因此根据 x 或 y 位置对数组进行排序通常就足够了,如下所示:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Order the labels based on their y position
    self.labelsArray = [self.labelsArray sortedArrayUsingComparator:^NSComparisonResult(UILabel *label1, UILabel *label2) {
        CGFloat label1Top = CGRectGetMinY(label1.frame);
        CGFloat label2Top = CGRectGetMinY(label2.frame);

        return [@(label1Top) compare:@(label2Top)];
    }];
}

关于objective-c - Interface Builder 中的 IBOutletCollection 集排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6527762/

相关文章:

objective-c - 有什么方法可以告诉我从哪个类/方法调用了一个方法?

cocoa-touch - 如果按下UIButton Xcode

ios - 在所有目标中使用相同的 CFBundleVersion 和 CFBundleShortVersionString

ios - UITableView 内容偏移量 -64pt 问题

ios - 以编程方式设置自动锁定

ios - 当用户缩小并且注释彼此太靠近时隐藏 MKAnnotations

ios - 使用自定义UIPopoverBackgroundView仅更改UIPopoverController中的边框颜色

ios - 如何阻止 NSTimer 转到 Selector 并以另一种方法扩展它?

ios - 警报 View 事件指示器显示时间

ios - 如何更改 UITableView 部分颜色和文本颜色