iOS:使用 nib 子类化 UITableViewCell,进入 UIView(不是视图控制器)子类
Posted
技术标签:
【中文标题】iOS:使用 nib 子类化 UITableViewCell,进入 UIView(不是视图控制器)子类【英文标题】:iOS: UITableViewCell subclassing with nib, into UIView (not view controller) subclass 【发布时间】:2013-10-01 15:45:22 【问题描述】:我有一个自定义 UIView 子类 Leaderboard,它本身包含一个 tableview tblLeaderboard。该接口是使用 xib 创建的。此外,我有一个 UITableViewCell 子类 LeaderboardCell,它也有一个 xib。我在表格视图中注册单元格时遇到问题。
这是我尝试过的,首先我用 tableview 注册了 nib:
-(id)initWithCoder:(NSCoder *)aDecoder
self = [super initWithCoder:aDecoder];
if (self)
leaderInfo = [NSMutableArray array];
tblLeaderboard.dataSource=self;
[tblLeaderboard registerNib:[UINib nibWithNibName:@"LeaderboardCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"leaderboardCell"];
return self;
然后在初始化我的单元格时:
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"leaderboardCell";
LeaderboardCell *cell = [tableView
dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
cell = [[LeaderboardCell alloc]
initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier];
//ADDED THIS IN CASE DEFAULT CELL WAS LOADED
cell.textLabel.text = [[leaderInfo objectAtIndex:indexPath.row] objectForKey:@"name" ];
cell.name.text = [[leaderInfo objectAtIndex:indexPath.row] objectForKey:@"name"];
cell.score.text = [[[leaderInfo objectAtIndex:indexPath.row] objectForKey:@"score"] stringValue];
return cell;
单元格不加载笔尖。它只是创建一个自定义单元格(默认单元格正确加载名称和分数,所以我知道数据源工作正常)。
我不确定我是否会因为使用 UIView 而不是 ViewController 来控制我的 UITableView 而遇到麻烦?
【问题讨论】:
【参考方案1】:我并没有太多使用 xibs 的经验,但在我的旧项目中,我是这样做的:
static NSString *leaderBoardIdentifier = @"leaderboardCell"; //cell identifier same name as identifier in xib cell's attribute inspector
LeaderboardCell *cell = (LeaderboardCell *)[tableView dequeueReusableCellWithIdentifier:leaderBoardIdentifier];
if (cell == nil)
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:leaderBoardIdentifier owner:self options:nil];
cell = [nib objectAtIndex:0];
我的单元格的 xib 文件包含 h/m 文件。在我的 .h 中,我刚刚连接了来自 xib 的元素。
cell 类中的initWithStyle 和setSelected 方法都有默认代码。
【讨论】:
当我尝试初始化时,我得到一个无法在包中加载 NIB:错误 呃,没关系。我偶然将我的笔尖命名为“leadboardCell”。我是一个工具。 是的,我在想它会是什么:D错字发生了:) 仍然会接受您的回答,因为自定义初始化绝对是必要的! :) 非常感谢先生。以上是关于iOS:使用 nib 子类化 UITableViewCell,进入 UIView(不是视图控制器)子类的主要内容,如果未能解决你的问题,请参考以下文章
子类化 FUIAuthPickerViewController 时“无法加载 NIB”
Swift 中的 NSWindowController。使用 Nib 进行子类化和初始化