6

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

何か案は?ありがとう

4

7 に答える 7

20
  1. adjustsFontSizeToFitWidth設定を有効にするには、プロパティnumberOfLinesを1に設定する必要があります。!= 1の場合、プロパティは機能しません。

  2. 、、awakeFromNibはまったく呼ばれていますかviewDidLoadviewWillAppear

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

    percentCorrect.font = [UIFont systemFontOfSize:20];

  4. 最後にminimumFontSize = 100、最小のフォントサイズには少し大きすぎませんか?

于 2010-07-22T21:56:39.830 に答える
2

initペン先にある場合は、ラベルを付ける必要はありません。もしそうなら、あなたはラベルを2回作成しました。だから、誰があなたがどちらにメッセージを送っているのかを知っています。ラベルを初期化するとすぐに、最初のラベルがリークされました。したがって、画面に表示されているラベルは、コードで操作しているラベルではありません。

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

それでも問題が解決しない場合は、viewDidAppear:単にこれをデバッグしてみてください。

于 2009-06-06T01:05:01.073 に答える
2

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

于 2009-06-05T20:19:12.790 に答える
0

何が起こると予想していますか?コードがコメントアウトされている場合、ラベルは表示されますか? ペン先でパーセントコレクトはどのように定義されていますか?

やってみました:

- (void)awakeFromNib {
    percentCorrect.adjustsFontSizeToFitWidth = YES;
    percentCorrect.numberOfLines = 3;
    percentCorrect.minimumFontSize = 100;
    percentcorrent.text = @"What is the text in percentCorrect?";
}
于 2009-06-06T10:57:51.780 に答える
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 の裁量で行われます。それがうまくいかないことがわかったので、メインスレッドでセレクターをお勧めします。

于 2010-04-06T16:43:48.683 に答える
0

私が見つけたのは、IBにあまり依存せず、フレームを設定する行を追加するだけです:

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

次に、自動サイズ変更が機能します!

于 2013-04-07T10:02:46.253 に答える
0

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

于 2009-06-05T20:15:41.343 に答える