我的应用中有4个不同的视图,当前显示完全相同的UITableViewCell。在我的故事板中,我有4次出现相同的单元格(这是一个非常复杂的自定义单元格),在.m文件中,我或多或少都有完全相同的代码将数据关联到UITableViewCell。
我知道这是一种错误的方法 - 维护和更新非常困难。
在故事板中集中UITableViewCell的正确方法是什么,并集中填充表格的代码,以便我可以在不同的视图中重用它?
答案 0 :(得分:5)
我个人认为在代码中编写所有视图是达到最大可重用性(和可扩展性,因为nib文件不能被子类化)的最佳方法。但我认为您也可以为UITableViewCell创建一个单独的nib并将其加载到每个视图控制器中。我认为无论采用哪种方法(在代码中完全设计单元格,或借助nib文件),您都可以使用以下内容在viewDidLoad
中的代码中加载单元格:
[self.tableView registerClass:MyCustomCell.class forCellReuseIdentifier:@"Cell"];
以上是我最常用的,因为我喜欢在代码中编写所有视图,显然对于加载nib,你可以参考dirtydanee描述的方法。 < / em>的
然后,您的tableView将在-cellForRowAtIndexPath:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
// configure your cell here ...
return cell;
}
答案 1 :(得分:4)
我建议为Xib
子类创建一个UITableViewCell
文件,并在其上声明configuration(_:)
函数。此函数可以使用任何参数,例如字典。但是,您可以提供包含参数的特定数据模型,可能是struct
或您正在使用的任何数据类型。
ReusableTableViewCell.h
#import <UIKit/UIKit.h>
@interface ReusableTableViewCell: UITableViewCell
@property(nonatomic, weak) IBOutlet UILabel* title;
@property(nonatomic, weak) IBOutlet UILabel* subTitle;
/// - Parameter configuration: It is a dictionary at the minute
/// However, it could be any type, you could even be creating your own model struct or class
- (void)configureWith:(NSDictionary *)configuration;
@end
ReusableTableViewCell.m
#import "ReusableTableViewCell.h"
@implementation ReusableTableViewCell
- (void)configureWith:(NSDictionary *)configuration {
self.title.text = configuration[@"title"];
self.subTitle.text = configuration[@"subTitle"];
}
- (void)prepareForReuse {
[super prepareForReuse];
self.title.text = nil;
self.subTitle.text = nil;
}
@end
将nib
注册到tableView
。重要的是,请勿将其注册为class
,请将其注册为nib
。
[tableView registerNib: [UINib nibWithNibName:@"yourCellNibName" bundle:nil] forCellReuseIdentifier:@"yourReuseIdentifier"];
在cellForRowAtIndexPath
的最后,只需获取配置并将其提供给tableViewCell
。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// create your cell
ReusableTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"yourReuseIdentifier"];
// get your configuration
NSDictionary *configuration = [configurations objectAtIndex:indexPath.row];
//configure your cell
[cell configureWith: configuration];
return cell;
}