sftsz
sftsz

Reputation: 356

Custom UITableCell not working

I searched too much, tried lot of thinks but i couldn't make it work.

I have a view controller, and in that controller i have a tableview which has custom cell. I connect outlets,datasource and delegate but when i run the project, instead of my custom cells. UITableCell is shown and not showing data either. here is my .h and .m files

#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

and here is my .m file

    @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;
}

the NSLog(@"---") is for debugging and it appears when running. the problem is in

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

this block, if i write cell.textLabel.text = "test" it works but i need my custom cell to shown.

any help will be appreciated..

Upvotes: 0

Views: 769

Answers (3)

tahir
tahir

Reputation: 1026

I had the same issue. To solve it check the followings :

  • in your nib file, you have removed the root view created by default, and dragged a UITableViewCell from XCode object browser, then set the custom type of the UItableViewCell to your subclass SelectMutantCell

  • you have linked the outlets

  • you have added the cell identifier to SelectMutantCell, as you would do in storyboard

  • last but not least, you didn't add the same cell in your storyboard TableView, it will conflit between the one from storyboard and the one from [self.tableView registerNib:cellNib forCellReuseIdentifier:@"SelectMutantCell"];

Upvotes: 0

user431791
user431791

Reputation: 341

Insert if(cell==nil){} loop

- (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;    
}

Upvotes: 2

Alexander
Alexander

Reputation: 8147

Looking at your cellForRowAtIndexPath: method, you never initialize the cell. Try doing it like this:

- (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;    
}

Upvotes: 0

Related Questions