Метод не возвращает новый экземпляр UILabel - PullRequest
0 голосов
/ 11 февраля 2012

Объявление метода,

-(UILabel *)returnUILabel:(UILabel *)myLabel color:(UIColor *)labelColor x:(int)xParameter     y:(int)yParamater width:(int)widthParameter height:(int)heightParameter
{
    CGRect cellFrame = CGRectMake(xParameter, yParamater, widthParameter, heightParameter);
    myLabel = [myLabel initWithFrame:cellFrame];
    myLabel.text = @"Testing";
    myLabel.shadowOffset = CGSizeMake(1,1);
    myLabel.backgroundColor = labelColor;
    return myLabel;
}

вызывается, как показано ниже в viewDidLoad,

UILabel *myLabel = [[UILabel alloc] init];
UIColor *labelColor = [UIColor redColor];

[self.view addSubview:[self returnUILabel:myLabel color:labelColor x:17 y:260 width:140 height:130]];
labelColor = [UIColor yellowColor] ;
[self.view addSubview:[self returnUILabel:myLabel color:labelColor x:170 y:260 width:140 height:130]];
[super viewDidLoad];  

На мой взгляд, я вижу только желтые цветные метки, тогда как я должен видеть одну красную и одну желтую. Зачем ??. Тот же подход прекрасно работает на UIImageView.

Спасибо

Ответы [ 2 ]

1 голос
/ 11 февраля 2012

У вас есть только один UILabel, все, что вы сделали, это изменили этот ярлык, а не создали новый экземпляр ярлыка

- (UILabel *)returnUILabelWithColor:(UIColor *)labelColor x:(int)xParameter y:(int)yParamater width:(int)widthParameter height:(int)heightParameter
{
    CGRect cellFrame = CGRectMake(xParameter, yParamater, widthParameter, heightParameter);
    UILabel* newLabel = [[[UILabel alloc] initWithFrame:cellFrame] autorelease];
    newLabel.text = @"Testing";
    newLabel.shadowOffset = CGSizeMake(1,1);
    newLabel.backgroundColor = labelColor;
    return newLabel;
}
1 голос
/ 11 февраля 2012

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

С UIView ссылка :

Представления могут иметь только одно суперпредставление. Если представление уже имеет суперпредставление и это представление не является получателем, этот метод удаляет предыдущее суперпредставление перед тем, как сделать получателя его новым суперпредставлением.

В качестве следствия, если суперпредставление такое же, добавление уже добавленного подпредставления просто поместит его поверх всех остальных представлений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...