0

UITableViewcontroller の代わりに UIViewController を使用していますが、静的コンテンツをテーブルに追加するという概念を理解するのに苦労しています。以前にプログラムで動的コンテンツを作成したことがありますが、静的コンテンツは作成したことがありません。

IBで設計したものは次のとおりです。

ここに画像の説明を入力

このコンテンツはすべて、TableCell 内の「コンテンツ ビュー」内にあります。

データソースとデリゲートを設定しましたが、1 つのセクションと 1 つのセルしか返されません。これがセルのコードです。通常、配列を使用してこれを設定しますが、IB の静的コンテンツで行う方法がわかりません。画像からオブジェクトを追加するにはどうすればよいですか? 最も重要なのは、各オブジェクトの位置を保持するにはどうすればよいですか? 手動で x、y 座標を入力する必要がないことを願っています。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"SimpleTableItem";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }


    return cell;
}

編集: 静的セルは UITableViewController で正常に動作します....UIViewController で動作させる方法はありますか、それともすべて切り替える必要がありますか?

4

2 に答える 2

1

静的セルには UITableViewController を使用する必要があります。

これは、UIViewController を使用した私の回避策です。

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

    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil){
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:CellIdentifier];
    }
    NSString * titol = [NSString new];
    NSString * valor = [NSString new];
    NSDictionary * el_contacte = [contactes objectAtIndex:(indexPath.row)];

    switch (indexPath.row) {
        case 0:
            titol = @"Nombre";
            valor = [el_contacte valueForKey:@"nombre_contacto"];
            break;
        case 1:
            titol = @"Teléfono";
            valor = [el_contacte valueForKey:@"telefono"];
            break;
        case 2:
            titol = @"Extensión";
            valor = [el_contacte valueForKey:@"extension"];
            break;
        case 3:
            titol = @"Móvil";
            valor = [el_contacte valueForKey:@"movil"];
            break;
        case 4:
            titol = @"Fax";
            valor = [el_contacte valueForKey:@"fax"];
            break;
        case 5:
            titol = @"email";
            valor = [el_contacte valueForKey:@"email"];
            break;

        default:
            break;
    }
    cell.textLabel.text = titol;
    cell.detailTextLabel.text = valor;

    return cell;
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
    NSString * retornar = [NSString new];
    switch (section) {
        case 0:
            retornar = @"Datos del cliente";
            break;
        case 1:
            retornar = @"Contacto";
            break;
        case 3:
            retornar = @"Personas";
            break;
        default:
            break;
    }
    return retornar;
}
于 2013-08-18T22:59:52.163 に答える
0

はい、UIViewController で実行できますが、それでも動的セルを使用しますが、静的な方法で行います。つまり、ストーリーボードにすべてのセルのサブビューを設定し、ラベルに必要なテキストを入れたり、画像ビューに画像を入れたりします。その後、cellForRowAtIndexPath でセルをデキューし、他に何もせずにそれを返します。 . コンテンツが異なるセルが複数ある場合は、それぞれに独自の識別子を持つ異なる動的プロトタイプを作成する必要があります。cellForRowAtIndexPath では、if-else ブロックを使用して渡された indexPathRow をテストし、その場所で必要な正しいセル タイプをデキューします。

于 2013-08-19T01:20:39.780 に答える