我创建了两个按钮的IBOutletCollect:
@property (retain, nonatomic) IBOutletCollection(UIButton) NSArray *allButtons;
现在我必须改变这些按钮的框架和位置:
[_allButtons makeObjectsPerformSelector:@selector(setFrame:) withObject: ????? ];
如何将我的自定义值设置为ID?我用过这个方法,但编译器给了我一个错误
[_allButtons makeObjectsPerformSelector:@selector(setFrame:) withObject:CGRectMake(10, 0, 0, 10)];
答案 0 :(得分:3)
使用块枚举您的数组:
[allButtons enumerateObjectsUsingBlock:^(UIButton *button, NSUInteger idx, BOOL *stop){
button.frame = newFrame;
};];
更强大,更灵活,也可能更快。
答案 1 :(得分:1)
答案 2 :(得分:1)
此代码适合您。
for (UIButton *btn in allButtons) {
[btn addTarget:self action:@selector(setFrame:) forControlEvents:UIControlEventTouchUpInside];
};
答案 3 :(得分:0)
CGRect不是对象,因此您必须将其包装在NSValue对象中,然后创建一个类别方法来执行框架的展开和设置:
[_allButtons makeObjectsPerformSelector:@selector(updateFrame:) withObject:[NSValue valueWithCGRect:CGRectMake(10, 0, 0, 10)]];
在UIView的类别中:
- (void)updateFrame:(NSValue *)frameValue {
self.frame = [frameValue CGRectValue];
}