2009-06-05 21 views
6

私のUILabelが変更されないのはなぜですか?私は、次のコードを使用していて、何も起こりません。ここで私のUILabelが変更されていないのはなぜですか?

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

は私Implemintationコードです:

- (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

その行は次のとおりです。[percentCorrect adjustFontSizeToFitWidth]; –

+7

percentCorrect.adjustsFontSizeToFitWidth = YES; –

答えて

0

percentCorrectがまだ初期化されていない可能性があります。関数が呼び出されたときにpercentCorrectnilと等しいですか?その場合は、プロパティを設定するために適切に初期化されるまで待ってください。

+0

あなたが正しいです、私はinitを忘れていました。しかし、まだ働いていません:/ –

2

すべてが正しく接続されていることを確認してください。 UITextfieldのIBOutletが設定されていることを確認し、メソッド内にブレークポイントを設定して、コードに触れていることを確認します。そうであれば、percentCorrectは正しく接続されていない可能性があります。

+0

ラベルが私のIBActionsに応答しているので、すべてが盛り上がっています –

+2

他の方法でラベル上のものをプログラムで変更することはできますか? IBOutletを接続することなくIBActionsを呼び出すことができるので、ラベルが確実にIBOutlet –

+0

ohに接続されていることを確認してください。まあそのIBに繋がった –

2

ラベルがペン先にある場合は、ラベルをinitにする必要はありません。そうであれば、ラベルを2回作成しました。誰にメッセージするかは誰に分かりますか。ラベルを初期化すると、最初のラベルが漏れてしまいました。したがって、画面上のラベルは、コード内で操作しているラベルではありません。

代わりにコードをviewDidLoadに配置してください。それまでに初期化する必要があります。

これが機能しない場合は、viewDidAppear:を試してみてください。

+0

それdidnt仕事:/ –

0

何が起こると思われますか?あなたのコードがコメントアウトされたときにラベルが表示されますか?ペン先でpercentCorrectはどのように定義されていますか?

あなたが試してみました:

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

いいえ。まだ動作していません:/ 質問に自分のコードを追加しました。おそらくそこに問題があります。 –

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の判断で、内部的に更新を強制れます。私はそれが私のために働かないことがわかりました、なぜ私はメインスレッドでセレクタをお勧めします。発効するadjustsFontSizeToFitWidth設定のためには

+0

UIKitクラスとそのインスタンスへのメッセージ、およびUIKit関数への呼び出しは、常にメインスレッド**の期間**で行われます。最近更新されたドキュメントを参照してください:http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CocoaFundamentals/AddingBehaviortoaCocoaProgram/AddingBehaviorCocoa.html#//apple_ref/doc/uid/TP40002974-CH5-SW40 –

20
  1. は、numberOfLinesプロパティは1

  2. awakeFromNibviewDidLoadviewWillAppearされている=!それはだ場合、それは動作しません。1に設定する必要があります。すべてで呼ばれる?

  3. minimumFontSizeプロパティは、テキストが現在のフォントで現在の境界に収まる場合は何も行いません。ラベルのフォントプロパティを設定しましたか?

    percentCorrect.font = [UIFont systemFontOfSize:20];

  4. 最後に、最小フォントサイズのために少し大きすぎるminimumFontSize = 100ではないでしょうか?私はIBにあまり依存しない、時々で見つけたもの

+3

これは正解です。 adjustsFontSizeToFitWidthプロパティのUILabelクラスリファレンスは、「このプロパティはnumberOfLinesプロパティが1に設定されている場合のみ有効です。 –

+0

@chrispix正しい、これは私のために働いた。 (私はMonoTouchを使用していますが、まったく同じ方法で動作します) – tomfanning

+0

@ettore「minimumFontSize = 100」は約1分のフォントサイズで大きくなります。 テキストフィールドをフィールドの上に座っている画像。その場合、 'minimumFontSize'をかなり大きく設定するのが理にかかります:' adjustsFontSizeToFitWidth' fontSizeを減らすだけで、fontSizeをスケールアップしません。 – Webdevotion

0

は、ちょうどフレームを設定する行を追加します。

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

、自動サイズ変更工事を!

関連する問題