我在UITableView
内使用UIViewController
时遇到问题:
当我启动应用时,会显示UITableView
,但不会显示来自_opponents的数据。
当我开始在UITableView
之外滚动第一个单元格时,现在此单元格会更新。
此外,当我手动触发[_topponents reloaddata]时,整个UITableView
显示正确的数据。
我需要添加或更改哪些内容,以便从头开始显示数据?
dataSource
和delegate
都与故事板中的类相关联
这是我的代码:
viewDidLoad:
- (void)viewDidLoad {
[super viewDidLoad];
myappdel = (AppDelegate *)[UIApplication sharedApplication].delegate;
self.title = @"New Match";
_lopponent.text = _opponent;
opponents = [[NSMutableArray alloc] init];
NSMutableDictionary *opponent = [[NSMutableDictionary alloc] init];
[opponent setObject:@"opponent A" forKey:@"name"];
[opponent setObject:@"xx matches | xx wins || xx losts" forKey:@"stats"];
[opponent setObject:@"Krems" forKey:@"location"];
NSMutableDictionary *opponent2 = [[NSMutableDictionary alloc] init];
[opponent2 setObject:@"opponent B" forKey:@"name"];
[opponent2 setObject:@"yy matches | yy wins || yy losts" forKey:@"stats"];
[opponent2 setObject:@"Location B" forKey:@"location"];
NSMutableDictionary *opponent3 = [[NSMutableDictionary alloc] init];
[opponent3 setObject:@"opponent C" forKey:@"name"];
[opponent3 setObject:@"zz matches | zz wins || zz losts" forKey:@"stats"];
[opponent3 setObject:@"Location C" forKey:@"location"];
[opponents addObject:opponent];
[opponents addObject:opponent2];
[opponents addObject:opponent3];
[_topponents reloadData];
}
这里是我的cellForRowAtIndexPath:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"opponentcell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
UILabel *lopponentname = (UILabel*)[cell viewWithTag:1];
UILabel *lopponentstats = (UILabel*)[cell viewWithTag:2];
UILabel *llocation = (UILabel*)[cell viewWithTag:3];
lopponentname.text = [[opponents objectAtIndex:indexPath.row] objectForKey:@"name"];
lopponentstats.text = [[opponents objectAtIndex:indexPath.row] objectForKey:@"stats"];
llocation.text = [[opponents objectAtIndex:indexPath.row] objectForKey:@"location"];
return cell;
}
答案 0 :(得分:2)
我发现了我的错!
我以前写过:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]
但我应该使用
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
使用" forIndexPath"
答案 1 :(得分:0)
我认为,问题在于细胞。创建UITableViewCell子类。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"opponentcell";
CustomTableViewCell *cell = (CustomTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell.lopponentname.text = [[opponents objectAtIndex:indexPath.row] objectForKey:@"name"];
cell.lopponentstats.text = [[opponents objectAtIndex:indexPath.row] objectForKey:@"stats"];
cell.llocation.text = [[opponents objectAtIndex:indexPath.row] objectForKey:@"location"];
return cell;
}
希望它对你有所帮助。
答案 2 :(得分:0)
在细胞初始化后添加。对我来说工作正常。
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}
答案 3 :(得分:0)
当细胞为零时,您需要检查条件。 最初的细胞是零.. 所以数据只在滚动后才加载...... 初始化单元格后,在cellForRowAtIndexPath委托方法中添加以下代码行。
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
希望这可以解决问题......
答案 4 :(得分:0)
我认为您正在使用自定义cel,看起来您在“cellForRowAtIndexPath”中遇到了麻烦。如果您使用.xib,您可能会发现它很有用。
static NSString *cellIdentifier = @"opponentcell";
CustomTableViewCell *cell = (CustomTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
NSArray *nibObjects =[[NSBundle mainBundle] loadNibNamed:@"CustomTableViewCell" owner:nil options:nil];
for (id currentObject in nibObjects)
{
if ([currentObject isKindOfClass:[CustomTableViewCell class]])
{
cell = (CustomTableViewCell *) currentObject;
}
}
[cell initViewStyles];
}