关于使用NSArray的IBOutletCollection,我有两个相互矛盾的来源.首先说,您从接口到出口集合链接的顺序是重要的,并且它在出口集合中始终是相同的.例如,如果我们首先将第一个文本字段链接到集合,则元素编号0将是该字段等.
但另一个消息来源告诉我,这是错误的,实际上Outlet集合是随机的,并且绝对不能保证事情的顺序.因此,元素数字零可以是任何文本字段,而不仅仅是接口中的第一个连接.
"iOS 6编程 - 探索iOS SDK"是第一个来源,iTunes上的斯坦福课程是第二个来源.谁是对的?
Dar*_*hah 16
btnCollection = btnCollection.sorted(by: { $0.tag < $1.tag})
Run Code Online (Sandbox Code Playgroud)
只需按标签分配控件的顺序,然后在加载时重新排序.
das*_*ght 15
两种来源都是正确的:一方面,由于Interface Builder的实现细节,添加项目的顺序IBOutletCollection
将在检索时保持; 另一方面,您应该避免在代码中使用该顺序,因为无法检查此顺序.
想象一下接管别人的项目.如果您看到一个循环IBOutletCollection
,观察迭代的顺序,并决定检查该订单是什么或强制新订单,您将不得不删除并重新添加控件到您的插座集合.这就是为什么你应该把你的IBOutletCollection
元素视为无序的原因.如果需要维护特定的顺序,请将元素复制到a中NSArray
,对某些已知属性进行排序,然后迭代复制的集合.
似乎在Xcode 7.x中,IBOutlet集合是有序的。
当然,您可以按需要的顺序将tag属性分配给集合中的每个元素,并执行类似的操作
- (void)viewDidLoad
{
[super viewDidLoad];
self.outletCollection = [self.outletCollection sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"tag" ascending:YES]]];
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5846 次 |
最近记录: |