IBOutletCollection 索引获取顺序问题
在sb中绑定了一个IBOutletCollection后,根据索引获取元素发现和自己拖线时的顺序不同,有时又会根据顺序,不知道是xcode的bug还是本身就是无序的。
在使用的时候直接排序:
- (void)viewDidLoad
{
[super viewDidLoad];
// Order the labels based on their y position
self.labelsArray = [self.labelsArray sortedArrayUsingComparator:^NSComparisonResult(id label1, id label2) {
if ([label1 frame].origin.y < [label2 frame].origin.y) return NSOrderedAscending;
else if ([label1 frame].origin.y > [label2 frame].origin.y) return NSOrderedDescending;
else return NSOrderedSame;
}];
}
把数组进行排序:
@interface NSArray (sortBy) - (NSArray*) sortByObjectTag; - (NSArray*) sortByUIViewOriginX; - (NSArray*) sortByUIViewOriginY; @end
@implementation NSArray (sortBy) - (NSArray*) sortByObjectTag { return [self sortedArrayUsingComparator:^NSComparisonResult(id objA, id objB){ return( ([objA tag] < [objB tag]) ? NSOrderedAscending : ([objA tag] > [objB tag]) ? NSOrderedDescending : NSOrderedSame); }]; } - (NSArray*) sortByUIViewOriginX { return [self sortedArrayUsingComparator:^NSComparisonResult(id objA, id objB){ return( ([objA frame].origin.x < [objB frame].origin.x) ? NSOrderedAscending : ([objA frame].origin.x > [objB frame].origin.x) ? NSOrderedDescending : NSOrderedSame); }]; } - (NSArray*) sortByUIViewOriginY { return [self sortedArrayUsingComparator:^NSComparisonResult(id objA, id objB){ return( ([objA frame].origin.y < [objB frame].origin.y) ? NSOrderedAscending : ([objA frame].origin.y > [objB frame].origin.y) ? NSOrderedDescending : NSOrderedSame); }]; } @end
然后包含头文件,你选择了它,该代码可以是:
- (void)viewDidLoad
{
[super viewDidLoad];
// Order the labels based on their y position
self.labelsArray = [self.labelsArray sortByUIViewOriginY];
}