0

ユーザーが8などの番号を指定した場合、ビューに8つのラベルを正確に配置するにはどうすればよいですか?

例えば:

int userGivenNumber = textfield.text;

for (int labelNumber=1; i<=userGivenNumber; i++) {

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, *previousLabel*.frame.origin.y + 20)];

}

どのようにあなたはの場所を取得しますpreviousLabelか?さらに、ユーザーがラベル3などのラベルを編集したい場合、このラベルを編集するにはどうすればよいですか?

問題は、コーディング中にラベルをいくつ配置したいかわからないことです。また、ラベルはと呼ばれるため、ラベルを追跡する方法がありませんlabel。あなたはなにか考えはありますか?私が何を求めているのか分かりますか?ご協力いただきありがとうございます。

4

3 に答える 3

3
- (void)addLabels {

    CGFloat offset = 0;

    // labels is NSMutableArray property

    labels = [[NSMutableArray alloc] initWithCapacity:8];

    for (int i = 0; i < 8; i++) {
        UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, offset, 320, 20)];
        [self.view addSubview:label];
        [labels addObject:label];

        offset += label.frame.size.height;
    }

}

編集: jerrylroberts が言ったように、コードの他の場所からラベル配列にアクセスするには、それをプロパティとして宣言する必要があります。

于 2012-06-20T19:38:35.523 に答える
1

したがって、次のようにビューを追加できます。

int userGivenNumber = [textfield.text intValue];

for (int labelNumber=1; i<=userGivenNumber; i++) {

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, *previousLabel*.frame.origin.y + 20)];

    [self.view addSubview:label];

    [label release];

}

それらを追跡したい場合は、プロパティとして可変配列を作成し、サブビューに追加する前に各ラベルを配列に追加することができます。

インターフェース

@property (nonatomic, retain) NSMutableArray *addedLabels;

実装

@synthesize addedLabels=_addedLabels;

- (void)viewDidLoad

    [super viewDidLoad];

    // Create your array to hold labels

    NSMutableArray *addedLabels = [[NSMutableArray alloc] initWithCapacity:0];

    self.addedLabels = addedLabels;

    [addedLabels release];

    // NOW put your code

    int userGivenNumber = [textfield.text intValue];

    for (int labelNumber=1; i<=userGivenNumber; i++) {

        UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, *previousLabel*.frame.origin.y + 20)];

        [self.view addSubview:label];

        [addedLabels addObject:label];

        [label release];

    }
}

インデックスがあれば、追加したラベルに簡単にアクセスできるようになりました。お役に立てれば

于 2012-06-20T19:45:08.857 に答える
0

ループの外側の場所 (CGPoint) への参照を保持するだけで、ループの内側で現在のラベルの場所に更新します。次のフレームを割り当てるときは、ラベルの幅とサイズに応じて操作を行い、CGPoint の参照を更新することを忘れないでください。

于 2012-06-20T19:38:13.903 に答える