3

例如,我的 ViewController.h 中有:

@property (weak, nonatomic) IBOutlet UIButton *buttonA;
....
@property (weak, nonatomic) IBOutlet UIButton *buttonZ;

在我的 ViewController.m 中,我有:

for (unichar ch = 'A'; ch <= 'Z'; ch++) {
    NSMutableString *nameOfButton = [[NSMutableString alloc] initWithString:@"button"];
    [nameOfButton appendString:[NSString stringWithCharacters:&ch length:1]];
    //Code equivalent to change "self.(nameOfButton).text = @"";"
}

我正在尝试遍历所有按钮,并更改它们的文本属性。基本上,我不确定如何使上述 for 循环相当于:

self.buttonA.text = @"";
self.buttonB.text = @"";
...
self.buttonZ.text = @"";

因为我使用的是 NSString 'nameOfButton' 而不是实际的属性名称。

4

5 回答 5

3

您可以创建一个 IBOutlet 集合而不是多个 UIButton IBOutlet 并循环遍历您的插座集合中的按钮。当您在视图和代码之间建立连接时,您在弹出的对话框中选择插座集合。(连接中)

示例:调用您的 IBOutlet 集合按钮列表并循环它:

for (UIButton *button in self.buttonList) {
    [button setTitle:@"text" forState:UIControlStateNormal];
}

PS:请记住始终使用 set title 作为状态,.text 不适用于按钮

于 2013-08-13T11:44:29.670 回答
1

您可以使用 KVC(键值编码)使用字符串提取属性,例如

UIButton *btn = (UIButton *)[self valueForKey@"buttonA"];
于 2013-08-13T11:19:00.183 回答
1

这对你有用

for (unichar ch = 'A'; ch <= 'Z'; ch++) {
    NSMutableString *nameOfButton = [[NSMutableString alloc] initWithString:@"button"];
    [nameOfButton appendString:[NSString stringWithCharacters:&ch length:1]];
    //Code equivalent to change "self.(nameOfButton).text = @"";"
    NSLog(@"%@",nameOfButton);


    UIButton *btn = (UIButton *)[self valueForKey:nameOfButton];
    [btn setTitle:nameOfButton forState:UIControlStateNormal];
}

该代码使您在本系列中的所有按钮都可以将那里的标题更改为那里的出口名称。带有该日志的代码是不言自明的

于 2013-08-13T11:33:51.443 回答
0

您可以在循环中使用 KVC(键值编码):

[self setValue:@"" forKeyPath:[NSString stringWithFormat:@"%@.text", nameOfButton]];
于 2013-08-13T11:19:53.650 回答
-1

您可以遍历 self.view 中的所有按钮,如果它们被添加到 viewcontroller 的视图中,如下所示

for (UIButton *button in self.view.subviews) {
// your code here

}
于 2013-08-13T11:15:29.660 回答