0

私はiosの世界で初めてです。テーブルビューコントローラーにロードするデータがあり、それは完全にロードされます..新しい挿入が行われた場合、新しいデータはインデックス0から始まるNSMutableArrayに追加されます(新しいデータは一番上にありますNSMutableArray を新しいデータで更新した後、[tableview reloadData] と呼びます。

私の目的は、テーブルビューコントローラー(インデックス0)の上部に新しいデータを表示することですが、新しいデータは何もロードされていません! なぜ ?

これは、テーブル セルをロードするために使用するコードです。データは、オブジェクトを含む NSMutableArray です。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
    NSString *identifier = [NSString stringWithFormat:@"cell%d", indexPath.row];

    MyCell *cell = (MyCell*)[tableView dequeueReusableCellWithIdentifier:identifier];

    if (cell == nil) {

        cell = [[MyCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:identifier];


        // add description
        UILabel *text = [[UILabel alloc] initWithFrame:CGRectMake(15,25, 260, 50)];
        text.numberOfLines=3;
        text.text= [[data objectAtIndex:indexPath.row] desc];
        text.backgroundColor=[UIColor clearColor];

        text.textAlignment= UITextAlignmentRight;
        text.font = [UIFont fontWithName:@"Helvetica" size:13];
        [cell addSubview:text];
    }

    //use your cell here
    cell.textLabel.textAlignment=UITextAlignmentRight;

    cell.textLabel.numberOfLines =3;

    // cell font
    cell.textLabel.font = [UIFont fontWithName:@"Helvetica" size:13.0];
    cell.textLabel.textColor=[UIColor blackColor];

    return cell;
}
4

3 に答える 3

1

セルが最初に作成されたときに UILabel に値を割り当てるだけのコードを見ると、セル != nil のデキューメソッドで、セルに既にあるラベルのフォントと色を変更するだけです。あなたの使用 StyleValue1

// add description
    UILabel *text = [[UILabel alloc] initWithFrame:CGRectMake(15,25, 260, 50)];
    text.numberOfLines=3;
    text.text= [[data objectAtIndex:indexPath.row] desc];
    text.backgroundColor=[UIColor clearColor];

    text.textAlignment= UITextAlignmentRight;
    text.font = [UIFont fontWithName:@"Helvetica" size:13];
    [cell addSubview:text];

セルにすでに関連付けられているラベルを使用するだけの場合、これは必要ありません。必要な場合は、表示するときにセルから再度取得できるように、ラベル タグを指定する必要があります。

また、セルのコンテンツ ビューの代わりにサブビューをセルに追加します。

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

{ UILabel *テキスト; NSString *identifier = [NSString stringWithFormat:@"cell%d", indexPath.row];

MyCell *cell = (MyCell*)[tableView dequeueReusableCellWithIdentifier:identifier];

if (cell == nil) {

    cell = [[MyCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:identifier];


    // add description
    text = [[UILabel alloc] initWithFrame:CGRectMake(15,25, 260, 50)];
    text.numberOfLines=3;        
    text.backgroundColor=[UIColor clearColor];
    text.tag = 1000;

    text.textAlignment= UITextAlignmentRight;
    text.font = [UIFont fontWithName:@"Helvetica" size:13];
    [cell addSubview:text];
} else {
    text = (UILabel*)[cell viewForTag:1000];
}

// Here you update the value of text
text.text= [[data objectAtIndex:indexPath.row] desc];

//use your cell here
cell.textLabel.textAlignment=UITextAlignmentRight;

cell.textLabel.numberOfLines =3;

// cell font
cell.textLabel.font = [UIFont fontWithName:@"Helvetica" size:13.0];
cell.textLabel.textColor=[UIColor blackColor];

return cell;
}
于 2013-09-16T20:29:56.763 に答える
0

あなたは誤解していると思います: テーブル ビュー セルは通常、識別子によって識別される特定の構造 (タイトルとサブタイトルなど) のオブジェクトです。したがって、最も単純なケースでは、テーブル ビューのすべてのセルが同じ構造を持ち、同じ識別子を持ちます。その理由は、テーブル ビュー セルを再利用できるからです。セルが画面の外にスクロールされると、プールに戻され、新しいセルが画面にスクロールされると、プールのセルが使用されます。新しいデータを表示します。この場合、テーブルの行ごとに新しい識別子を作成しても意味がありません。
問題は、テーブル ビューに不明な識別子を持つセルを要求することです。これはNSString *identifier = [NSString stringWithFormat:@"cell%d", indexPath.row];
、単一の識別子で識別される単一のテーブル ビュー セル タイプを使用し、そのプロパティを設定することをお勧めします。cell.textLabel.textによると。

于 2013-09-16T20:30:29.293 に答える