2017-01-30 6 views
3

Мое приложение получает измерение каждую минуту. Когда измерение равно 0, я хочу, чтобы метка отображалась посередине. Когда это больше, когда я хочу, чтобы метка исчезла. Проблема заключается в том, что как только появится метка, она не скроется, если я установил свой скрытый режим в true.UILabel не скрывается при установке на скрытый

UILabel *emptyBagLabel = [[UILabel alloc] init]; 
    emptyBagLabel.textAlignment = NSTextAlignmentCenter; 
    emptyBagLabel.textColor = [UIColor darkGrayColor]; 
    emptyBagLabel.numberOfLines = 0; 
    emptyBagLabel.text = @"EMPTY POUCH"; 
    emptyBagLabel.translatesAutoresizingMaskIntoConstraints = NO; 
    emptyBagLabel.hidden = true; 

    [self addSubview:emptyBagLabel]; 

    [emptyBagLabel.centerXAnchor constraintEqualToAnchor:self.centerXAnchor].active = YES; 
    [emptyBagLabel.centerYAnchor constraintEqualToAnchor:self.centerYAnchor].active = YES; 
    [emptyBagLabel.widthAnchor constraintEqualToAnchor:self.widthAnchor].active = YES; 
    [emptyBagLabel.heightAnchor constraintEqualToConstant:100].active= YES; 

    if (measurement == 0 || measurement <= 0.005) { 
     emptyBagLabel.hidden = false; 
    } 

    if (measurement > 0.005) { 
     emptyBagLabel.hidden = true; 
    } 

Я почесал голову на это некоторое время, немного разочарован тем, как я не в состоянии решить такую ​​тривиальную проблему. Метод, который у меня есть, называется каждую минуту. Я знаю, что метод и строка hidden = true вызываются, поэтому я не уверен, что вызывает проблему.

+2

Но вы создаете новую метку каждый раз, когда этот метод называется, не скрывая предыдущий – redent84

+0

я вижу, то, как я должен идти о работе с этим? –

+0

Вы держите ссылку на свой первый ярлык, а затем нажимаете '.hidden = true' на этой метке – redent84

ответ

3

Подвижность, добавляемая программно, должна быть добавлена ​​лениво, поэтому вы получаете ровно один экземпляр subview. Я бы реорганизовать код, как это ...

- (UILabel *)emptyBagLabel { 
    UILabel *emptyBagLabel = (UILabel *)[self.view viewWithTag:128]; 
    if (!emptyBagLabel) { 
     emptyBagLabel = [[UILabel alloc] init]; 
     emptyBagLabel.tag = 128; 

     // set all of the attributes her for how the label looks, textColor, etc. 
     // everything except the properties that change over time 

     [self addSubview:emptyBagLabel]; 
    } 
    return emptyBagLabel; 
} 

// if this view is built using initWithFrame... 
- (id)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 
    if (self) { 
     [self emptyBagLabel]; // to add the label initially 
    } 
    return self; 
} 

// if this view is ever loaded from a nib, then 
- (id)initWithCoder:(NSCoder *)aDecoder { 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     [self emptyBagLabel]; 
    } 
    return self; 

} 

// elsewhere in the view, when you get the measurement 
// side note: alpha is usually a better choice than hidden because you can animate it 
if (measurement == 0 || measurement <= 0.005) { 
    self.emptyBagLabel.alpha = 1.0; 
} 

if (measurement > 0.005) { 
    self.emptyBagLabel.alpha = 0.0; 
} 
+0

У меня нет доступа к self.emptyBagLabel –

+0

@FaisalSyed - это метод, указанный в ответе. Если вы добавите этот метод, 'self.emptyBagLabel' или более правильно' [self emptyBagLabel] 'будет работать нормально. – danh

+0

А я вижу. Также этот код находится в (void) drawRect для UIView, поэтому у меня нет доступа к viewDidLayoutSubviews. Должен ли я просто добавить метку в методе init? –

Смежные вопросы