Изменить цвет фона UILabel в массиве

У меня есть массив UILabels.

UILabel *tag = [[UILabel alloc]initWithFrame:CGRectMake(offx,offy, 200, 50)];
[tag setTextColor:[UIColor whiteColor]];
[tag setFont:tagText.font];
tag.numberOfLines = 0;
[tag setText:tagText.text];
[self addSubview:tag];
[_tagArray addObject:tag];

Позже я хотел бы изменить цвет фона одной из меток в этом массиве.

NSLog(@"%@", [_tagArray lastObject]);
UILabel *l = (UILabel *)[_tagArray lastObject];
[l setBackgroundColor:[UIColor redColor]];
[[_tagArray lastObject] setBackgroundColor:[UIColor redColor]];

В журнале появляется созданная мной метка, но цвет фона не меняется.

UILabel: 0x15fec10c0; кадр = (6 78; 52 29); текст = 'привет'; clipsToBounds = ДА; userInteractionEnabled = НЕТ; layer = ‹_UILabelLayer: 0x174298240


person Peter    schedule 01.02.2017    source источник
comment
Как узнать, что цвет фона не меняется? Код, который вы разместили, выглядит нормально.   -  person rmaddy    schedule 01.02.2017
comment
@rmaddy Я [self addSubview:tag]; добавляю его в свой обзор.   -  person Peter    schedule 01.02.2017
comment
Возможно, вам придется опубликовать еще код, потому что ваш код выглядит совершенно нормально и правильно.   -  person bubibu    schedule 01.02.2017


Ответы (2)


Попробуйте этот код

   NSArray *_tagArray=[[NSArray alloc] initWithObjects:@"First",@"Second",@"Third",nil];
             for (int xOff=0; xOff<[_tagArray count]; xOff++) 
            {
                UILabel *tag = [[UILabel alloc]initWithFrame:CGRectMake(xOff,xOff*50, 200, 50)];
                [tag setTextColor:[UIColor blueColor]];
                tag.numberOfLines = 0;
                [tag setText:[_tagArray objectAtIndex:xOff]];
                [tag setTag:xOff];

                [self.view addSubview:tag];
            }

            UILabel *l = (UILabel *)[self.view viewWithTag:1];
            [l setBackgroundColor:[UIColor greenColor]];

            UILabel *l2 = (UILabel *)[self.view viewWithTag:2];
            [l2 setBackgroundColor:[UIColor redColor]];
person Rohit Kashyap    schedule 01.02.2017
comment
Пожалуйста, объясните, что было не так с кодом в вопросе, и объясните, как этот ответ решает проблему. Ответы только на код не подходят для SO. - person rmaddy; 01.02.2017
comment
@rmaddy Опубликованного кода недостаточно, чтобы понять, что пошло не так, это может быть основная проблема очереди или конфликтующие теги, поэтому просто опубликовал рабочий код, могу ли я удалить ответ? - person Rohit Kashyap; 01.02.2017

    _tagArray = [_tagArray replaceObjectAtIndex:_tagArray.count-1 withObject:l];

Используйте это, потому что вы взяли последний объект и изменили цвет этого объекта. После этого просто замените этот последний объект из массива и удалите последнюю строку кода.

person Pavankumar    schedule 01.02.2017
comment
В этом нет необходимости и на это не влияет. И этот код даже не компилируется. - person rmaddy; 01.02.2017