更改IBOutletCollection的帧值

时间:2012-12-21 11:25:34

标签: iphone objective-c ios ipad

我创建了两个按钮的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 个答案:

答案 0 :(得分:3)

使用块枚举您的数组:

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

更强大,更灵活,也可能更快。

答案 1 :(得分:1)

CGRect不是对象,因此无法直接添加。 将它包装在NSValue中:

[NSValue valueWithCGRect:]
看看 NSValue Class Reference

答案 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];
}