1

UILabels を iPhone のビューに追加するための関数またはループ プロトタイプを探しています。これは、追加する必要があるラベルの数が事前にわからないため、動的に追加する必要があるためです。

私の擬似コードは次のとおりです。アイデアは、各ラベルに文字列が与えられ、次の画面に配置されるというものです。したがって、 +self.view.frame.size.width ステートメントです。ページングなどは完全に機能します。問題は、すべてのラベルが 2 番目の画面に表示されることです。つまり、ラベル 3 がラベル 2 の上に表示されます。問題は、常に altLabel を参照しているように見えるため、 2番目の位置、私は常にその位置を参照しており、一度も移動することはありません.

「count」変数を使用して画面幅を倍増させることができますが、そうすると、ラベル テキストを更新するたびに前のテキストが上書きされます。

int count = 0;
int maxNumber = 10;

    while(count < maxNumber) {
    //Add a label
        UILabel *altlabel; //Declare the label

        if (count > 0) {
            //Move the label
             altlabel = [[UILabel alloc] initWithFrame:CGRectMake(CGRectGetMinX(altlabel.frame)+self.view.frame.size.width,10,300,25)];
            altlabel.text = [NSString stringWithFormat:@"%@ %@ (%d)", _name,_age, class+count];
        }

        else {
             altlabel = [[UILabel alloc] initWithFrame:CGRectMake(10,10,300,25)];
            altlabel.text = [NSString stringWithFormat:@"%@ %@ (%d)", _name,_age, class];
        }


    altlabel.textColor = [UIColor greenColor];
    [altlabel sizeToFit];
    [_scrollView addSubview:altlabel];
        count++;
    }
4

4 に答える 4

1

問題は次の行です。

UILabel *altlabel; // Declare the label

if (count > 0) {
    //Move the label
    altlabel = [[UILabel alloc] initWithFrame:CGRectMake(CGRectGetMinX(altlabel.frame)+self.view.frame.size.width,10,300,25)];
    altlabel.text = [NSString stringWithFormat:@"%@ %@ (%d)", _name,_age, class+count];
}

altlabel.frameを使用してフレームを設定していますが、altlabel設定されていません。最初の行でUILabel *altlabelを使用して再宣言しました。

このコードを使用すると、最初のラベルを除くすべてのラベルが同じフレームになります。これを試してください:

int count = 0;
int maxNumber = 10;

CGRect rect;

while(count < maxNumber) {
    // Add a label
    UILabel *altlabel; // Declare the label

    if (count > 0) {
        //Move the label
        altlabel = [[UILabel alloc] initWithFrame:CGRectMake(CGRectGetMinX(rect.frame)+self.view.frame.size.width*count, 10, 300, 25)];
        altlabel.text = [NSString stringWithFormat:@"%@ %@ (%d)", _name,_age, class+count];

    } else {
        altlabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 300, 25)];
        altlabel.text = [NSString stringWithFormat:@"%@ %@ (%d)", _name,_age, class];
    }

    rect = altlabel.frame;

    altlabel.textColor = [UIColor greenColor];
    [altlabel sizeToFit];
    [_scrollView addSubview:altlabel];
    count++;
}

これで、新しいラベルのフレームが一時変数 (CGRect フレーム) に保存され、使用できるようになります。

于 2013-10-07T08:36:18.250 に答える
0

このコードは動作するはずです:

int カウント = 0; int maxNumber = 10;

while(count < maxNumber) {
//Add a label
    UILabel *altlabel; //Declare the label

    if (count > 0) {
        //Move the label
         altlabel = [[UILabel alloc] initWithFrame:CGRectMake(CGRectGetMinX(altlabel.frame)+(self.view.frame.size.width*count),10,300,25)];
        altlabel.text = [NSString stringWithFormat:@"%@ %@ (%d)", _name,_age, class+count];
    }

    else {

         altlabel = [[UILabel alloc] initWithFrame:CGRectMake(10,10,300,25)];
        altlabel.text = [NSString stringWithFormat:@"%@ %@ (%d)", _name,_age, class];
    }


altlabel.textColor = [UIColor greenColor];
[altlabel sizeToFit];
[_scrollView addSubview:altlabel];
    count++;
}
于 2013-10-07T08:35:21.090 に答える