Saya secara terprogram membuat tampilan tabel di tujuan c. Bagaimana saya bisa membuat sel menjadi statis secara terprogram?
Terima kasih
Saya secara terprogram membuat tampilan tabel di tujuan c. Bagaimana saya bisa membuat sel menjadi statis secara terprogram?
Terima kasih
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;
}
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.
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;
}
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);
}
}
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.