0

カップルボタンのIBOutletCollectを作成しました:

@property (retain, nonatomic) IBOutletCollection(UIButton) NSArray *allButtons;

次に、これらのボタンのフレームと位置を変更する必要があります。

[_allButtons makeObjectsPerformSelector:@selector(setFrame:) withObject: ????? ];

ここでカスタム値をidとして設定するにはどうすればよいですか?この方法を使用しましたが、コンパイラでエラーが発生します

    [_allButtons makeObjectsPerformSelector:@selector(setFrame:) withObject:CGRectMake(10, 0, 0, 10)];
4

4 に答える 4

3

ブロックを使用して配列を列挙します。

[allButtons enumerateObjectsUsingBlock:^(UIButton *button, NSUInteger idx, BOOL *stop){
    button.frame = newFrame;
};];

はるかに強力で柔軟性があり、おそらく同様に高速です。

于 2012-12-21T11:34:56.227 に答える
1

CGRectはオブジェクトではないため、直接追加することはできません。NSValueでラップします。

[NSValue valueWithCGRect:]

NSValueクラスリファレンスを ご覧ください

于 2012-12-21T11:32:02.067 に答える
1

このコードはあなたのために働きます。

for (UIButton *btn in allButtons) {
    [btn addTarget:self action:@selector(setFrame:) forControlEvents:UIControlEventTouchUpInside];
};
于 2012-12-21T11:44:53.843 に答える
0

CGRectはオブジェクトではないため、NSValueオブジェクトでラップしてから、フレームのアンラップと設定を行うカテゴリメソッドを作成する必要があります。

[_allButtons makeObjectsPerformSelector:@selector(updateFrame:) withObject:[NSValue valueWithCGRect:CGRectMake(10, 0, 0, 10)]];

UIViewのカテゴリ:

- (void)updateFrame:(NSValue *)frameValue {
    self.frame = [frameValue CGRectValue];
}
于 2012-12-21T11:31:38.400 に答える