iOS:UITableViewCell使用nib进行子类化,进入UIView(非视图控制器)子类

时间:2013-10-01 15:45:23

标签: ios cocoa-touch nib

我有一个自定义的UIView子类Leaderboard,它本身包含一个tableview tblLeaderboard。界面是用xib创建的。另外,我有一个UITableViewCell子类LeaderboardCell,它也有一个xib。我在tableview中注册单元格时遇到了麻烦。

这是我尝试过的,首先我用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 个答案:

答案 0 :(得分:0)

我真的没有很多使用xib的经验,但在我的旧项目中,我是这样做的:

    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中的元素。

单元类中的initWithStyle和setSelected方法中包含默认代码。