複数のUIButtonやUILabelをIBOutletCollectionに
まとめると最初からNSArrayに入っているので使い勝手がよいはず
なのですが順序がグチャグチャになってしまう欠点があります。
それで解決方法です。
@interface UIControl (sorted)
- (NSComparisonResult)compareByY:(UIControl*)control;
@end
@implementation UIControl (sorted)
- (NSComparisonResult)compareByY:(UIControl*)control
{
NSComparisonResult result;
if (self.frame.origin.y <control.frame.origin.y) {
result=NSOrderedAscending;
}else if(self.frame.origin.y > control.frame.origin.y){
result=NSOrderedDescending;
}else {
result=NSOrderedSame;
}
return result;
}
@end
上記のようにカテゴリでソート用比較メソッドを追加し
- (void)viewDidLoad
{
[super viewDidLoad];
self.buttonAnswers=[self.buttonAnswers sortedArrayUsingSelector:@selector(compareByY:)];
}
UIViewContorollerの実装内でソートをかけるわけです。
配置座標のY値でソートしています。
だいたい並び順でソートしたいというパターンだと思いますので。