1

Personタイプのオブジェクトを含むNSMutableArrayがあります。Personオブジェクトには、NSString * name、NSString * dateStamp、およびNSString*testScoreのパラメーターが含まれています。高速列挙を使用して実行したいのは、各オブジェクトのパラメーターをビューの行にUILabelとして表示し、各オブジェクトを各行に表示することです。

問題は、NSMutableArrayが任意の数のオブジェクトを保持する可能性があるため、ビューに1行または2行のラベルが存在するか、ビューに複数の行が存在する可能性があることです。ビューに各オブジェクトを動的に配置する(そして一定の間隔で配置する)forループを作成し、ユーザーが下にスクロールして、さらに下にあり、最初は画面に表示されない行を表示できるようにします。 。

私のforループは次のようになります。

for (Person *checkPerson in personList) {
    UILabel *label1 =  [[UILabel alloc] initWithFrame: CGRectMake(10, 10, 50, 20)];
    label1.text = Person.name;

    UILabel *label2 =  [[UILabel alloc] initWithFrame: CGRectMake(70, 10, 50, 20)];
    label2.text = Person.dateStamp;

    UILabel *label3 =  [[UILabel alloc] initWithFrame: CGRectMake(130, 10, 50, 20)];
    label3.text = Person.testScore;

    [self.view addSubView:label1];
    [self.view addSubView:label2]; 
    [self.view addSubView:label3];
 }

私がする必要があるのは、CGRectMakeフィールドの「y」値を動的に調整して、NSMutableArrayが繰り返されるときに各オブジェクトが別の行で順番に下に移動し、ユーザーが下にスクロールして追加の行をさらに表示できるようにすることです。必要。スクロール機能は自動的に追加されますか?

4

2 に答える 2

2

ブロック列挙を行う必要があります。これにより、計算に使用できるインデックスも提供されます。y

[personList enumerateObjectsUsingBlock:^(Person *person, NSUInteger idx, BOOL *stop) {
    UILabel *label1 =  [[UILabel alloc] initWithFrame: CGRectMake(10, 10+20*idx , 50, 20)];
    label1.text = person.name;
    UILabel *label2 =  [[UILabel alloc] initWithFrame: CGRectMake(70, 10+20 *idx, 50, 20)];
    label2.text = person.dateStamp;

    UILabel *label3 =  [[UILabel alloc] initWithFrame: CGRectMake(130, 10+20*idx, 50, 20)];
    label3.text = person.testScore;

    [self.view addSubView:label1];
    [self.view addSubView:label2]; 
    [self.view addSubView:label3];
}];

それらをUIScrollViewに配置する必要があります。ここで、配列内の要素の数に応じてcontentSizeを設定します。

scrollView.contentSize = CGSizeMake(<width>, [personList count] / 3 *30);

UITableViewの使用も検討する必要があります。それはより簡単かもしれません、そしてセルの再利用はメモリ使用量を低く保ちます。

于 2012-12-17T20:16:18.020 に答える
0

コードに変数を追加し、y反復ごとに変数を増やすだけです

CGFloat y = 10;
for (Person *checkPerson in personList) {
    UILabel *label1 =  [[UILabel alloc] initWithFrame: CGRectMake(10, y, 50, 20)];
    label1.text = Person.name;

    UILabel *label2 =  [[UILabel alloc] initWithFrame: CGRectMake(70, y, 50, 20)];
    label2.text = Person.dateStamp;

    UILabel *label3 =  [[UILabel alloc] initWithFrame: CGRectMake(130, y, 50, 20)];
    label3.text = Person.testScore;

    [self.view addSubView:label1];
    [self.view addSubView:label2]; 
    [self.view addSubView:label3];

    y+=80;
 }

しかし、他の人が言ったように、UITableViewはこれらのようなタスクに向けられています:D

于 2012-12-17T20:34:33.153 に答える