ios:自定义UITableViewCell为空

ios:自定义UITableViewCell为空,ios,uitableview,Ios,Uitableview,我不明白为什么它不能加载我的内容。这是单元格的.m和.h文件(还有一个.xib文件) TCMExploreLevelCell.h #import <Foundation/Foundation.h> @interface TCMExploreLevelCell : UITableViewCell @property (weak, nonatomic) IBOutlet UIImageView *levelImage; @property (weak, nonatomi

我不明白为什么它不能加载我的内容。这是单元格的.m和.h文件(还有一个.xib文件)

TCMExploreLevelCell.h

#import <Foundation/Foundation.h>

@interface TCMExploreLevelCell : UITableViewCell
    @property (weak, nonatomic) IBOutlet UIImageView *levelImage;
    @property (weak, nonatomic) IBOutlet UILabel *levelTitle;

    @property (weak, nonatomic) id controller;
    @property (weak, nonatomic) UITableView *owningTableView;

@end
下面是tableview中加载行的函数。如果您注意到nslog,第一个日志将返回正确的级别标题。第二个返回单元格的实例,但是在设置levelTitle文本后,它在第三个NSlog中返回null

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
TCMLevelRemote *l = [[[[TCMExhibitFeedStore sharedStore] allLevels] objectForKey:@"levels"] objectAtIndex:[indexPath row]];

NSLog(@"%@",[l level]);
TCMExploreLevelCell *c = [tableView dequeueReusableCellWithIdentifier:@"TCMExploreLevelCell"];
if(!c){
    c = [[TCMExploreLevelCell alloc] initWithStyle:UITableViewCellStyleDefault
                               reuseIdentifier:@"TCMExploreLevelCell"];

}
NSLog(@"%@",c);
[c setController:self];
[c setOwningTableView:tableView];

[[c levelTitle] setText:[l level]];

NSLog(@"%@",[c levelTitle]);

if ([l levelid] == 1){
    [[c levelImage] setImage:[UIImage imageWithContentsOfFile:@"lowerlevel.png"]];
} else if ([l levelid] == 6) {
    [[c levelImage] setImage:[UIImage imageWithContentsOfFile:@"alllevels.png"]];
} else {
    [[c levelImage] setImage:[UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"level%d.png",[indexPath row]]]];
}

return c;
}

您应该在
cellforrowatinexpath:
delegate方法中使用
loadNibNamed:
方法,如下所示:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *cellIdentifier = @"Cell";

    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if(cell == nil) {
        NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"YourCustomCell.xib" owner:self options:nil];

        for(id currentObject in nibArray){
            if([currentObject isKindOfClass:[CustomCell class]]){
                cell = (CustomCell *)currentObject;
                break;
            }
        }
    }

return cell;

}

如果您的单元格有一个xib文件,则在viewDidLoad中注册该文件:

[self.tableView registerNib:[UINib nibWithNibName:@"TCMExploreLevelCell" bundle:nil] forCellReuseIdentifier:@"TCMExploreLevelCell"];

然后,在cellForRowAtIndexPath中,使用dequeueReusableCellWithIdentifier:forIndexPath:而不是dequeueReusableCellWithIdentifier:。您不需要if(cell==nil)子句,该方法保证为您提供一个单元格。这是使用基于xib的单元格的推荐方法,而不是在CellForRowatineXpath中加载nib。

尝试将它们设置在-tableView:WillselectRowatineXpath:我不需要在构建表时设置视图吗?我最后做了类似的事情。
[self.tableView registerNib:[UINib nibWithNibName:@"TCMExploreLevelCell" bundle:nil] forCellReuseIdentifier:@"TCMExploreLevelCell"];