自定义UITableCell无法正常工作

时间:2012-08-03 10:20:09

标签: ios uitableview

我搜索得太多,尝试了很多,但我无法使其发挥作用。

我有一个视图控制器,在该控制器中我有一个具有自定义单元格的tableview。 我连接outlet,datasource和delegate但是当我运行项目时,而不是我的自定义单元格。显示UITableCell,也不显示数据。这是我的.h和.m文件

#import <UIKit/UIKit.h>
@class SelectMutantCell;
@interface MutantViewController : UIViewController <UITableViewDataSource,UITableViewDelegate>{
UITableView *tableView;
IBOutlet SelectMutantCell *mutantCell;
}

@property (nonatomic, weak) IBOutlet UITableView *tableView;
@property (nonatomic, weak) SelectMutantCell *mutantCell;    

- (IBAction)cancel:(id)sender;

@end

这是我的.m文件

    @implementation MutantViewController

@synthesize tableView = _tableView;
@synthesize mutantCell = _mutantCell;

NSArray *mutants;

- (void)viewDidLoad
{
    [super viewDidLoad];
    //mutants = [mutants initWithObjects:@"Keko",@"HEHE",@"PEPE", nil];
    UINib *cellNib = [UINib nibWithNibName:@"SelectMutantCell" bundle:nil];
    [self.tableView registerNib:cellNib forCellReuseIdentifier:@"SelectMutantCell"];

}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *CellIdentifier = @"SelectMutantCell";

    SelectMutantCell *cell = (SelectMutantCell *)[self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    NSLog(@"---");

    cell.nameLabel.text = @"Hehe"];
    cell.descriptionLabel.text = @"hhe";



    return cell;    
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return 3;
}

NSLog(@“---”)用于调试,运行时显示。问题在于

cell.nameLabel.text = @"Hehe"];
cell.descriptionLabel.text = @"hhe";

这个块,如果我写cell.textLabel.text =“test”它可以工作,但我需要我的自定义单元格显示。

任何帮助将不胜感激..

3 个答案:

答案 0 :(得分:2)

插入if(cell == nil){}循环

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *CellIdentifier = @"SelectMutantCell";
    SelectMutantCell *cell = (SelectMutantCell *)[self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[SelectMutantCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
    NSLog(@"---");
    cell.nameLabel.text = @"Hehe"];
    cell.descriptionLabel.text = @"hhe";
    return cell;    
}

答案 1 :(得分:0)

查看您的cellForRowAtIndexPath:方法,您永远不会初始化单元格。尝试这样做:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *CellIdentifier = @"SelectMutantCell";

    SelectMutantCell *cell = (SelectMutantCell *)[self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"SelectMutantCell" owner:nil options:nil];
        for(id currentObject in topLevelObjects) {
            if([currentObject isKindOfClass:[SelectMutantCell class]]) {
                cell = (SelectMutantCell *)currentObject;
                break;
            }
        }
    }
    NSLog(@"---");

    cell.nameLabel.text = @"Hehe"];
    cell.descriptionLabel.text = @"hhe";



    return cell;    
}

答案 2 :(得分:0)

我有同样的问题。要解决它,请检查以下内容:

    在您的nib文件中
  • ,您已删除默认创建的根视图,并从XCode对象浏览器拖动UITableViewCell,然后将UItableViewCell的自定义类型设置为您的子类SelectMutantCell

  • 您已关联商店

  • 您已将细胞标识符添加到SelectMutantCell,就像在故事板中一样

  • 最后但并非最不重要的是,你没有在故事板TableView中添加相同的单元格,它将在故事板和来自[self.tableView registerNib:cellNib forCellReuseIdentifier:@“SelectMutantCell”]的单板之间进行混淆。