我正在制作一个自定义的UITableViewCell。因此,我们的想法是创建一个带有某种新闻的UITableView。这个新闻有一个主题和描述。我有一个NieuwsTableviewCell类和一个UITableViewController的FirstViewController。我正在使用PHP文件从数据库中获取数据。 如何获取标签上每个新行的news_topic和说明?
我的FirstViewController.m文件看起来像这样。
#import "FirstViewController.h"
#import "NieuwsTableViewCell.h"
@implementation FirstViewController
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}
-(void) getData:(NSData *) data{
NSError *error;
json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
[self.tableView reloadData];
}
-(void) start {
NSURL *url = [NSURL URLWithString:kGETUrl];
NSData *data = [NSData dataWithContentsOfURL:url];
[self getData:data];
}
- (void)viewDidLoad
{
[self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
[super viewDidLoad];
[self start];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
#warning Potentially incomplete method implementation.
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
#warning Incomplete method implementation.
// Return the number of rows in the section.
return [json count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
NieuwsTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSArray* views = [[NSBundle mainBundle] loadNibNamed:@"NieuwsTableViewCell" owner:nil options:nil];
for (UIView *view in views) {
if([view isKindOfClass:[UITableViewCell class]])
{
NSDictionary *info = [json objectAtIndex:indexPath.row];
cell.textLabel.text = [info objectForKey:@"Nie_topic"];
cell = (NieuwsTableViewCell*)view;
}
}
}
return cell;
}
FirstViewController。 h文件
#define kGETUrl @"http://localhost/getNieuws.php"
@interface FirstViewController : UITableViewController{
NSMutableArray *json;
}
这是我的NieuwsTableViewCell.h文件
@interface NieuwsTableViewCell : UITableViewCell{
IBOutlet UILabel *topic;
IBOutlet UILabel *omschrijving;
}
@property (nonatomic, retain) IBOutlet UILabel *topic;
@property (nonatomic, retain) IBOutlet UILabel *omschrijving;
@end
有人可以帮忙吗?
答案 0 :(得分:0)
你在这个方法中得到任何数据吗??
-(void) getData:(NSData *) data
检查阵列&在其中打印每个字典..
答案 1 :(得分:0)
问题出在这里:
NSDictionary *info = [json objectAtIndex:indexPath.row];
cell.textLabel.text = [info objectForKey:@"Nie_topic"];
cell = (NieuwsTableViewCell*)view;
在上面的代码中,您将设置已出列或为空的UITableViewCell的属性,然后重新设置单元格变量,覆盖您对textLabel所做的更改,从而导致无法显示主题。
请考虑以下代码。与您目前使用的代码相比,如果tableView尚未创建可重用单元格,则调用if语句,并将单元格设置为您正在加载的nib中的UITableViewCell子视图。我们不是在单元格为零时设置textLabel的文本,而是对每个单元格执行此操作,以防止重用问题,并且单元格中不显示任何主题。
NieuwsTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSArray *subViews = [[NSBundle mainBundle] loadNibNamed:@"NieuwsTableViewCell" owner:nil options:nil];
for (UIView *view in subViews) {
if([view isKindOfClass:[UITableViewCell class]])
{
cell = (NieuwsTableViewCell*)view;
}
}
}
NSDictionary *info = [json objectAtIndex:indexPath.row];
cell.textLabel.text = [info objectForKey:@"Nie_topic"];
编辑---刚刚意识到这篇文章已经有1年了,今天是最后更新的,这也是我发布答案的原因。如果这对任何人都有利,那么它是值得的。