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 回答