UITableView - 填充每个单元格上的标签

时间:2015-10-08 18:06:27

标签: objective-c uitableview

我有以下代码,使用JSON变量提供的信息填充UITableView。问题是没有标签(TitleLabelReferenceLabel)填充,我留下了默认的标签标题。我错过了什么(这让我发疯了?)

TableView.h

    #import <UIKit/UIKit.h>
#define kGETUrl @"http://localhost/RtnDBScript.php"

@interface TableViewController : UITableViewController {

    NSMutableArray *json;
}

TableView.m

#import "TableViewController.h"
#import "TableViewCell.h"

@interface TableViewController ()

@end

@implementation TableViewController

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];

    if (self) {

    }
    return self;
}

- (void) getData:(NSData *) data {
    json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
    [self.tableView reloadData];
}

- (void) start {
    NSURL *url = [NSURL URLWithString:kGETUrl];
    NSData *data = [NSData dataWithContentsOfURL:url];

    [self getData:data];
}

#pragma mark - View Lifecycle
- (void)viewDidLoad {
    [super viewDidLoad];

    [self start];
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.
    return [json count];
}

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

    TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    if (cell == nil) {
        cell = [[TableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    }
    NSDictionary *info = [json objectAtIndex:indexPath.row];

    cell.TitleLabel.text = [info objectForKey:@"Name"];
    cell.DescriptionLabel.text = [info objectForKey:@"Message"];

    return cell;
}

在上面的代码中,我得到以下错误'Property'TitleLabel'在'CountryTableViewCell'类型的对象上找不到 cell.TitleLabel.text = [info objectForKey:@“Name”];     cell.DescriptionLabel.text = [info objectForKey:@“Message”];

TableViewCell.h

#import <UIKit/UIKit.h>

@interface CountryTableViewCell : UITableViewCell{
}

TabelViewCell.m

@implementation CountryTableViewCell

- (void)awakeFromNib {
    // Initialization code
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

任何和所有帮助表示赞赏。

1 个答案:

答案 0 :(得分:-1)

你能试试吗?

CountryTableViewCell *cell = (CountryTableViewCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

// It seems that you are using prototype cell so no need to alloc.
//if (cell == nil) {
//    cell = [[CountryTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
//}

确保CellIdentifier与storyboard原型单元格中的标识符匹配。

更新

如果您可以看到默认文本,则问题可能在于绑定标签(标签已创建但未绑定到插座)。

验证在分配文本后立即记录日志。

NSLog([cell.TitleLabel description]);

你可以试试吗

 cell.TitleLabel.text = [NSString stringWithFormat:@"%@",[info objectForKey:@"Name"]];// Tell the system explicitly that this value will be NSString.