我希望能够使用一个功能更新两组相同的按钮。此外,我不想更新所有按钮,只更新其中一些按钮。
我可以拥有这样的功能吗?:
-(void) updateFields{
updateButton1 : (Bool) x
updateButton2 : (Bool) y
updateButton3 : (Bool) z }
实现将如下所示:
[button1_1 setEnabled:x];
[button1_2 setEnabled:x]; //called only if updateButton1 is given an argument
[button2_1 setEnabled:y];
etc...
答案 0 :(得分:0)
如何传递一个按钮数组和一个包含在NSNumber中的布尔数组?
- (void)updateButton:(NSArray *)buttons withArray:(NSArray *)enablers {
// buttons is an array of UIButton
// enablers is an array of NSNumber created from boolean value
// Security check
if(buttons.count != enabler.count) {
NSLog(@"Error: array have different dimensions");
return;
}
// Enable buttons
for(int i=0; i<buttons.count; i++) {
UIButton *button = (UIButton *)[buttons objectAtIndex:i];
BOOL enable = [[enablers objectAtIndex:i] boolValue]
[button setEnabled:enable];
}
}
答案 1 :(得分:0)
原始数据类型可能无法实现,除非您从它们创建对象并将它们放在NSArray或NSDictionary中。其他选项可以是创建自定义对象并将其作为参数传递。
- (void)selectButton:(SelectedButton *)iButton {
if (iButton.type = A) {
// Handle A
} else if (iButton.type = B) {
// Handle B
} else if (iButton.type = C) {
// Handle C
}
}
答案 2 :(得分:0)
我认为你想要的语法作为C函数更有意义
但请注意,在此示例中,参数不是可选的。
void updateButtons(BOOL btn1, BOOL btn2, BOOL btn3){
button1.enabled = btn1
button2.enabled = btn2
button3.enabled = btn3
}
答案 3 :(得分:0)
可以使用变量参数列表创建一个Objective-C方法,正如Matt Gallagher在Variable argument lists in Cocoa中所解释的那样。变量参数列表甚至在Foundation框架中使用,例如+[NSArray arrayWithObjects:...]
。
也就是说,将方法中的按钮列表作为数组传递可能要少得多,特别是考虑到现在可以使用对象文字轻松创建数组:
[foo updateFields:@[button1, button2, button3]];