如何以编程方式访问视图控制器中的所有标签

Web*_*ode 0 objective-c uiviewcontroller uilabel ios

我不确定这是否可行,但无论如何我都会问.

这是我的ViewController.h

@interface TBL_GameViewController : UIViewController

@property (strong, nonatomic) IBOutlet UILabel *roundText;
@property (strong, nonatomic) IBOutlet UILabel *roundNumber;

@property (strong, nonatomic) IBOutlet UILabel *playerText;
@property (strong, nonatomic) IBOutlet UILabel *playerScore;

@property (strong, nonatomic) IBOutlet UILabel *computerText;
@property (strong, nonatomic) IBOutlet UILabel *computerScore;

@end
Run Code Online (Sandbox Code Playgroud)

这是.m文件中的一种方法

- (void) lablesHiden:(BOOL)on
{
    self.roundText.hidden   = on;
    self.roundNumber.hidden = on;

    self.playerText.hidden  = on;
    self.playerScore.hidden = on;

    self.computerText.hidden  = on;
    self.computerScore.hidden = on;
}
Run Code Online (Sandbox Code Playgroud)

这一切都是工作文件.

问题
是以编程方式访问视图控制器中所有可用标签的某种方法吗?

我之所以这样问的原因是:
我将有大约10种方法需要访问这些标签,以更改各种属性(颜色,文本,......).
如果明天我添加更多标签,我还需要为所有这些方法添加新标签,我想避免这种情况?

更新
我最后使用这种方法

- (NSArray*) getAllLabels
{

    NSArray *labels = [[NSArray alloc] initWithObjects:self.roundText, self.roundNumber, self.playerText, self.playerScore, self.computerText, self.computerScore, nil];

    return labels;
}

- (void) appear:(BOOL)on
{
    for (UILabel *label in [self getAllLabels]) {
        label.alpha = 0.0;
    }
    // more code 
}
Run Code Online (Sandbox Code Playgroud)

Oxc*_*cug 5

绝对有一种方法:

for (id label in self.view.subviews) {
    if ([label isKindOfClass:[UILabel class]]) {
        // do your stuff...
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果代码只是您要遍历的视图层次结构的一级,那么您的代码是正确的。如果要遍历整个视图层次结构,请使其递归。 (2认同)