为什么我的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
有什么想法吗? 感谢
答案 0 :(得分:20)
为了使adjustsFontSizeToFitWidth
设置生效,numberOfLines
属性必须设置为1.如果它是!= 1,它将无效。
是否会调用awakeFromNib
,viewDidLoad
,viewWillAppear
?
如果文本与当前字体匹配当前边界,则minimumFontSize
属性将不执行任何操作。您是否为标签设置了font属性?
percentCorrect.font = [UIFont systemFontOfSize:20];
最后,对于最小字体大小,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工作!