设置UILabel数组的值,而UILabel又在NSMutableDictionary中

时间:2012-02-26 01:50:45

标签: objective-c

我有一个UILabel数组如下:

@interface ClueLabels : NSObject

@property (nonatomic) IBOutlet UILabel *label1, *label2, *label3, *label4, *label5, *label6, *label7, *label8;
@property (nonatomic, readonly) NSArray *labels;

+ (ClueLabels *)clueLabels;

- (void)labelsDidLoad;

@end

实现为单身人士:

@implementation ClueLabels

@synthesize label1 = _label1;
@synthesize label2 = _label2;
@synthesize label3 = _label3;
@synthesize label4 = _label4;
@synthesize label5 = _label5;
@synthesize label6 = _label6;
@synthesize label7 = _label7;
@synthesize label8 = _label8;

@synthesize labels = _labels;

+ (ClueLabels *)clueLabels {
    static ClueLabels *singleton;
    static dispatch_once_t once;
    dispatch_once(&once, ^{
        singleton = [[ClueLabels alloc] init];
    });
    return singleton;
}

- (void)labelsDidLoad {
    _labels = [[NSArray alloc] initWithObjects:_label1, _label2, _label3, _label4, _label5, _label6, _label7, _label8, nil];
    NSLog(@"Clue labels did load");
}

@end

然后存储在NSMutableDictionary中,如下所示:

 NSMutableArray *keyArray;
 NSMutableArray *valueArray;
 keyArray = [NSMutableArray arrayWithObjects:@"answerButtons", @"clueLabels", nil];
 valueArray = [NSMutableArray arrayWithObjects: [AnswerButtons answerButtons], [ClueLabels clueLabels], nil];

 NSMutableDictionary *externals = [NSMutableDictionary dictionaryWithObjects:valueArray
                                                       forKeys:keyArray];

现在我想写标签(例如,清除它们),但它们被埋在一个单例中并作为一个数组存储在键值字典中。从概念上讲,我需要使用键值语法向字典中的一个对象发送消息,然后循环遍历该数组中的对象,例如使用setText @“”清除它们。这是一个带循环的嵌套消息吗?我无法弄清楚如何构建这个任务。谢谢。

编辑:我必须思考并决定(可能不正确),因为标签是单一的,我根本不需要通过字典访问它们,我只需要访问单例,字典将是自动更新。所以我决定我的问题/问题更多是“如何与我的单身人士交谈”。我环顾四周,然后发现我可以做这样的事情:

NSLog(@"%@", [ClueLabels clueLabels].labels)

返回每个标签的详细信息。我希望能够得到标签的数量,这样我就可以遍历它们并将它们的标题设置为任意字符串。我可以围绕[ClueLabels clueLabels] .labels构建或者我需要一种不同的方法吗?感谢。

3 个答案:

答案 0 :(得分:0)

如你所说,你可以在UILabels上循环。或者你可以在数组上使用“makeObjectsPerformSelector”方法,它将(正如其名称所示)使其中的所有对象执行你发送的选择器。从而节省了循环部分。但无论哪种方式,你都需要掌握字典中包含的标签数组

答案 1 :(得分:0)

任务完成!我是这样做的:

// Clear the fields

for (NSInteger idx = 0; idx < 8; idx++) {
    UILabel *l = [[ClueLabels clueLabels].labels objectAtIndex:idx];
    [l setText:@""];

显然,我还在学习!

答案 2 :(得分:0)

您也可以这样做:

   for (UILabel *theLabel in clueLabels)
   {
   [theLabel setText:@"];
   }