Почему моя UILabel не меняется? - PullRequest
6 голосов
/ 06 июня 2009

Почему не меняется моя UILabel? Я использую следующий код, и ничего не происходит:

- (void)awakeFromNib {
    percentCorrect.adjustsFontSizeToFitWidth;
    percentCorrect.numberOfLines = 3;
    percentCorrect.minimumFontSize = 100;
}

Вот мой код реализации:

- (void) updateScore {
    double percentScore = 100.0 * varRight / (varWrong + varRight);
    percentCorrect.text = [NSString stringWithFormat:@"%.2f%%", percentScore];
}

- (void)viewDidLoad {
    percentCorrect.adjustsFontSizeToFitWidth = YES;
    percentCorrect.numberOfLines = 3;
    percentCorrect.minimumFontSize = 100;
    percentCorrect.text = @"sesd";
}


- (void)correctAns {
    numberRight.text = [NSString stringWithFormat:@"%i Correct", varRight];
}

-(void)wrongAns {
    numberWrong.text = [NSString stringWithFormat:@"%i Incorrect", varWrong];
}

#pragma mark Reset Methods
- (IBAction)reset:(id)sender; {
    NSString *message = @"Are you sure you would like to reset?";
    self.wouldYouLikeToReset = [[UIAlertView alloc] initWithTitle:@"Reset?" message:message delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:nil];
    [wouldYouLikeToReset addButtonWithTitle:@"Continue"];
    [self.wouldYouLikeToReset show];
    // Now goes to (void)alertView and see's what is being pressed!
}

- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (buttonIndex == 0)
    {
        NSLog(@"Cancel button pressed");
    }
    else
    {
        varRight = 0;
        varWrong = 0;
        [self wrongAns];
        [self correctAns];
        percentCorrect.text = [NSString stringWithFormat:@"0.0%%"];

    }
}

#pragma mark Button Action Methods

- (IBAction)right:(id)sender; {
    varRight++;
    [self correctAns];
    [self updateScore];
}

- (IBAction)wrong:(id)sender; {
    varWrong++;
    [self wrongAns];
    [self updateScore];
}


- (IBAction)subOneRight:(id)sender {
    if (varRight > 0 ) {
        varRight--;
        [self correctAns];
        [self updateScore];
    }
}


- (IBAction)subOneWrong:(id)sender {
    if (varWrong > 0) {
        varWrong--;
        [self wrongAns];
        [self updateScore];
    }
}

-(IBAction)addHalfCredit:(id)sender;
{
    varWrong++;
    varRight++;
    [self wrongAns];
    [self correctAns];
    [self updateScore];
}


@end

Есть идеи? Спасибо

Ответы [ 7 ]

20 голосов
/ 23 июля 2010
  1. Чтобы параметр adjustsFontSizeToFitWidth вступил в силу, свойство numberOfLines должно быть установлено в 1. Оно не будет работать, если оно! = 1.

  2. Вызывается ли awakeFromNib, viewDidLoad, viewWillAppear вообще?

  3. Свойство minimumFontSize ничего не сделает, если текст вписывается в текущие границы с текущим шрифтом. Вы установили свойство шрифта для метки?

    percentCorrect.font = [UIFont systemFontOfSize:20];

  4. Наконец, не слишком ли большой minimumFontSize = 100 для минимального размера шрифта?

2 голосов
/ 06 июня 2009

Вы не должны init указывать свой ярлык, если он находится в кончике. Если да, то вы создали ярлык дважды. Итак, кто знает, с кем вы общаетесь. Как только вы инициализировали лейбл, вы пропустили первый. Таким образом, ярлык на экране НЕ тот, которым вы манипулируете в коде.

Попробуйте вместо этого поместить свой код в viewDidLoad. Это должно быть инициализировано к тому времени.

Если это не сработает, попробуйте viewDidAppear: просто, чтобы попытаться отладить это.

2 голосов
/ 06 июня 2009

Убедитесь, что все правильно подключено. Убедитесь, что IBOutlet для UITextfield настроен, и установите точки останова в методе и убедитесь, что к коду обращаются. Если это так, возможно, percentCorrect неправильно подключен.

0 голосов
/ 07 апреля 2013

Иногда я обнаруживаю, не слишком полагайтесь на IB, просто добавьте строку для установки фрейма:

labelx.frame=CGRectMake(labelx.frame.origin.x,labelx.frame.origin.y, 300, labelx.frame.size.height);

Тогда авторазмер работает!

0 голосов
/ 06 апреля 2010

У меня была такая же проблема. Кажется, что setText автоматически не вызывает перерисовку, когда изменение происходит в неосновном потоке. Обновления пользовательского интерфейса всегда должны выполняться в главном потоке, чтобы обеспечить оперативность. Есть другой способ заставить его использовать селектор:

label = [[UILabel alloc] init];   //assumes label is a data member of some class
...
(some later method where you want to update the label)
...
[label performSelectorOnMainThread:@selector(setText) withObject:@"New label value" waitUntilDone:false];

Вы также можете получить результаты, просто сказав:

[label setNeedsDisplay]; 

, что приведет к внутреннему обновлению, но по усмотрению SDK. Я обнаружил, что это не работает для меня, поэтому я рекомендую селектор в главном потоке.

0 голосов
/ 06 июня 2009

Чего вы ожидаете? Метка показывает, когда ваш код закомментирован? Как проценты правильно определены в кончике?

Вы пробовали:

- (void)awakeFromNib {
    percentCorrect.adjustsFontSizeToFitWidth = YES;
    percentCorrect.numberOfLines = 3;
    percentCorrect.minimumFontSize = 100;
    percentcorrent.text = @"What is the text in percentCorrect?";
}
0 голосов
/ 06 июня 2009

Возможно, что percentCorrect еще не инициализирован. percentCorrect равно nil, когда эта функция вызывается, случайно? Если это так, подождите, пока он не будет правильно инициализирован, чтобы установить его свойства.

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