为什么我的UILabel没有改变?

时间:2009-06-05 20:13:14

标签: iphone cocoa uilabel

为什么我的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 个答案:

答案 0 :(得分:20)

  1. 为了使adjustsFontSizeToFitWidth设置生效,numberOfLines属性必须设置为1.如果它是!= 1,它将无效。

    < / LI>
  2. 是否会调用awakeFromNibviewDidLoadviewWillAppear

  3. 如果文本与当前字体匹配当前边界,则minimumFontSize属性将不执行任何操作。您是否为标签设置了font属性?

    percentCorrect.font = [UIFont systemFontOfSize:20];

  4. 最后,对于最小字体大小,minimumFontSize = 100是不是太大了?

答案 1 :(得分:2)

确保所有内容都正确连接。确保UITextfield的IBOutlet已设置并在方法中设置断点并查看是否正在触摸代码。如果是,则可能percentCorrect未正确连接。

答案 2 :(得分:2)

如果你的标签在笔尖中,你不应该init。如果是,那么您创建了两次标签。那么谁知道你要传达哪一个。一旦你初始化了标签,你就泄漏了第一个标签。因此,屏幕上的标签不是您在代码中操作的标签。

尝试将代码放在viewDidLoad中。它应该在那时初始化。

如果这不起作用,请尝试viewDidAppear:尝试调试此问题。

答案 3 :(得分:0)

percentCorrect可能尚未初始化。什么时候调用该函数时,percentCorrect是否等于nil?如果是这样,请等到正确初始化后再设置其属性。

答案 4 :(得分:0)

你期待发生什么?当您的代码被注释掉时,标签是否会显示?如何在nib中定义percentCorrect?

你试过了吗?

- (void)awakeFromNib {
    percentCorrect.adjustsFontSizeToFitWidth = YES;
    percentCorrect.numberOfLines = 3;
    percentCorrect.minimumFontSize = 100;
    percentcorrent.text = @"What is the text in percentCorrect?";
}

答案 5 :(得分:0)

我遇到了同样的问题。似乎在非主线程上发生更改时,setText不会自动强制重绘。应始终在主线程上完成UI更新,以确保响应能力。还有另一种方法可以使用选择器强制它:

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自行决定。我发现这对我不起作用,因此我推荐主线程上的选择器。

答案 6 :(得分:0)

我发现有时候,不要过分依赖IB,只需添加一行来设置框架:

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

然后,autoresize工作!