1

テーブルの行にUILabelを設定したいのですが、アプリの再起動時に毎回ラベルの数が違うのが難点です。動的な行と列を持つテーブルを作成したいという詳細をクリアします。行はそれ自体で設定されますが、列にはダイナミクスでもあるラベルを設定するので、新しい Web サービスが呼び出されるたびにそのラベルを設定するにはどうすればよいですか?

元。

行/列

A1 b11 b12 .......b1n

A2 b21 b22 .......b2n

A3 b31 b32 .......b3n . .

Am bm1 bm2 .......bmn

ここで、A は行またはb は列です

4

5 に答える 5

2

たとえば、rowDataという可変配列を作成できます。init / initWithCoder / etcメソッドで、たとえば、各ラベルのデータを含む、columnDataと呼ばれる別の可変配列を作成できます。各行のcolumnDataオブジェクトをrowDataに追加します。

cellForRowAtIndexPathメソッドの場合、次のように実行できます。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];

if (!cell) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"] autorelease];

    int row = [indexPath row];
    int i = 0;
    int nLabels = [[rowData objectAtIndex:row] count];
    UILabel *label;

    NSLog([NSString stringWithFormat:@"%d labels", nLabels]);

    for (i = 0; i < nLabels; i++) {
        NSLog([NSString stringWithFormat:@"%d", i]);
        label = [[[UILabel alloc] initWithFrame:CGRectMake(cell.frame.origin.x + (i * 40), cell.frame.origin.y, 40, cell.frame.size.height)] autorelease]; //replace 40 with desired label width
        label.textColor = [UIColor grayColor];
        label.backgroundColor = [UIColor clearColor];
        // set the label text here

        [cell.contentView addSubview:label];

        NSLog([NSString stringWithFormat:@"%d subviews", [[cell.contentView subviews] count]]);
    }
}

return cell;

}

于 2012-08-31T07:42:07.523 に答える
1

より良いオプションは、 UITableViewCell に UITableView を作成するだけで、各ラベルがセルになり、内部テーブルビューのスクロールを無効にできます。ただし、内側のテーブルビューの高さを正しく計算したことを確認する必要があります。

n個のUIlabelを追加するなどの他のソリューションでは、スムーズなスクロールができません。

于 2015-06-23T06:33:45.743 に答える
0

DTGridViewなどの別のビューの使用を検討する必要があります

于 2012-08-31T09:32:46.210 に答える
0

必要な最大数のラベルを持つセルを作成します。タグを 1,2,3,4... にします - 数字が増えます。テーブルでセルを提供するように求められるたびに、古いセルまたは新しいセルを取得し、必要なラベルの数を決定し、その範囲のラベルを表示して (つまり、label.hidden = NO;)、他のセルを非表示にします。ラベル。明らかに、表示されるラベルのテキストを変更する必要があります。

于 2012-08-27T11:33:26.717 に答える
0

tag メソッドと indexpath.row を使用します。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];

            if (!cell) {
                      cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
                      for (i = 0; i < n; i++) {
                              label = [[UILabel alloc] initWithFrame:CGRectMake (i * yourWidth, 0, yourWidth + 5, yourHight)]; 
                              label.textColor = [UIColor blueColor];
                              label.tag = (indexPath.row)*100 + i  //you can create n labels in a row.
                              label.text = [NSString stringWithString:@"%d",label.tag]; 
                              [cell.contentView addSubview:label];
                        }
            }

        return cell;

} 

お役に立てると思います。

于 2012-08-31T09:09:38.153 に答える