Mengatur sel statis di uitableview secara terprogram

Saya secara terprogram membuat tampilan tabel di tujuan c. Bagaimana saya bisa membuat sel menjadi statis secara terprogram?

Terima kasih


person jpo    schedule 25.06.2012    source sumber


Jawaban (5)


Dengan menggunakan pengidentifikasi sel yang berbeda untuk masing-masing sel, Anda akan mendapatkannya. Anda bisa menggunakan sesuatu seperti ini:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellIdentifier = [NSString stringWithFormat:@"s%i-r%i", indexPath.section, indexPath.row];
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease];
        //you can customize your cell here because it will be used just for one row.
    }

    return cell;
}
person Ricard Pérez del Campo    schedule 25.06.2012

Membuat sel statis secara terprogram tidak masuk akal. Sel statis pada dasarnya hanya untuk Pembuat Antarmuka dan mengharuskan seluruh Tampilan Tabel menjadi statis. Mereka memungkinkan Anda untuk menyeret UILables, UITextFields, UIImageViews, dll. langsung ke dalam sel dan menampilkannya seperti apa yang terlihat di Xcode saat aplikasi dijalankan.

Namun, sel Anda bisa menjadi "statis" secara terprogram dengan tidak menggunakan sumber data luar dan melakukan hardcoding semuanya, yang biasanya akan menjadi berantakan dan umumnya merupakan ide yang buruk.

Saya sarankan membuat UITableViewController baru dengan .xib dan menyesuaikannya dari sana jika Anda ingin sel "statis". Jika tidak, cukup hardcode semua nilai Anda dan pada dasarnya sama, tetapi mungkin desainnya buruk jika dapat dihindari.

person MikeS    schedule 25.06.2012
comment
Saya pikir sangat dapat diterima untuk secara terprogram membuat sel tampilan tabel statis sebanyak yang Anda inginkan jika Anda ingin menghindari penggunaan InterfaceBuilder. Ada banyak alasan sah untuk ingin meminimalkan penggunaan InterfacerBuilder. - person MH175; 24.11.2018

Anda juga dapat melakukannya dengan cara lama dan membuat sel sesuai keinginan Anda bergantung pada NSIndexPath, ini berfungsi dengan tampilan tabel Static Cell TVC dan reguler (jangan lupa untuk mengembalikan jumlah bagian dan baris yang tepat dalam metode sumber datanya ):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    switch indexPath.row {
        case 0:
            // First cell, setup the way you want

        case 1:
            // Second cell, setup the way you want
    }

    // return the customized cell
    return cell;
}
person LJ Wilson    schedule 25.06.2012

Jika Anda ingin membuat struktur sel misalnya untuk layar pengaturan atau sesuatu seperti itu dan Anda mungkin hanya perlu mengubah beberapa konten sel tetapi bukan struktur jumlah atau bagiannya, Anda dapat membebani metode subkelas UITableViewController Anda seperti ini:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *aCell = [super tableView:tableView cellForRowAtIndexPath:indexPath];

    // Configure the cell...
    if ([aCell.reuseIdentifier isEqualToString:@"someIdentifier"]){
        //some configuration block
    }

    else if ([aCell.reuseIdentifier isEqualToString:@"someOtherIdentifier"]) {
        //other configuration block
    }
    return aCell;
}

Namun Anda dapat membuatnya dengan cara yang lebih baik dengan sedikit lebih banyak kode;

1) Di awal file .m Anda, tambahkan typedef:

typedef void(^IDPCellConfigurationBlock)(UITableViewCell *aCell);

2) tambahkan properti cellConfigurations ke ekstensi TablviewControllerSubclass Anda:

@interface IPDSettingsTableViewController ()

@property (nonatomic, strong) NSDictionary *cellConfigurations;
@property (nonatomic) id dataModel;

@end

3) Ubah sel statis subkelas TableviewController Anda di storyboard atau xib dan tambahkan cellReuseIdentifier unik untuk setiap sel yang ingin Anda modifikasi secara terprogram

4) Dalam blok konfigurasi sel pengaturan metode viewDidLoad Anda:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self SetupCellsConfigurationBlocks];
}

- (void)SetupCellsConfigurationBlocks
{
    //Store configurations code for each cell reuse identifier
    NSMutableDictionary *cellsConfigurationBlocks = [NSMutableDictionary new];        


    //store cells configurations for a different cells identifiers
    cellsConfigurationBlocks[@"someCellIdentifier"] = ^(UITableViewCell *aCell){
        aCell.backgroundColor = [UIColor orangeColor];
    };

    cellsConfigurationBlocks[@"otherCellIdentifier"] = ^(UITableViewCell *aCell){
        aCell.imageView.image = [UIImage imageNamed:@"some image name"];
    };

    //use waek reference to self to avoid memory leaks
    __weak typeof (self) weakSelf = self;
    cellsConfigurationBlocks[@"nextCellIdentifier"] = ^(UITableViewCell *aCell){
        //You can even use your data model to configure cell
        aCell.textLabel.textColor = [[weakSelf.dataModel someProperty] isEqual:@YES] ? [UIColor purpleColor] : [UIColor yellowColor];
        aCell.textLabel.text      = [weakSelf.dataModel someOtherProperty];
    };
    weakSelf.cellConfigurations = [cellsConfigurationBlocks copy];
}

5) membebani metode tableView:cellForRowAtIndexPath seperti ini:

#pragma mark - Table view data source

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *aCell = [super tableView:tableView cellForRowAtIndexPath:indexPath];

    // configure cell
    [self configureCell:aCell withConfigurationBlock:self.cellConfigurations[aCell.reuseIdentifier]];
    return aCell;
}

- (void)configureCell:(UITableViewCell *)aCell withConfigurationBlock:(IDPCellConfigurationBlock)configureCellBlock
{
    if (configureCellBlock){
        configureCellBlock(aCell);
    }
}
person Nikolay Shubenkov    schedule 08.05.2015

Sangat umum untuk ingin membuat tabel sederhana untuk digunakan sebagai menu atau formulir, namun menggunakan API bawaan dengan sumber data dan callback delegasi tidak memudahkan penulisan atau pemeliharaan. Anda mungkin perlu menambahkan/menghapus/memperbarui beberapa sel secara dinamis, jadi menggunakan Storyboard saja tidak akan berfungsi.

Saya menyusun MEDeclarativeTable untuk membuat tabel kecil secara terprogram. Ini menyediakan sumber data dan delegasi untuk UITableView. Kami berakhir dengan API tempat kami menyediakan contoh bagian dan baris alih-alih menerapkan sumber data dan metode delegasi.

person Michael Enriquez    schedule 12.05.2015