好吧,我现在已经停留了大约3个小时并且阅读了所有其他线程以及我在Google上可以找到的并且做了很多trialAndError,但它没有帮助。请注意,我是Objective C和Cocoa Touch的初学者。
我有一个UITableViewConroller子类。我希望能够以编程方式添加单元格。我重写了以下方法:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
SectionInfo *obj = nil;
obj = [dataSourceMutableArray objectAtIndex:section];
return [obj GetNumberOfCells];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return [dataSourceMutableArray count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = nil;
CellInfo *cellInfo = nil;
SectionInfo *si = [dataSourceMutableArray objectAtIndex:indexPath.section];
cellInfo = [si.cellInfos objectAtIndex:indexPath.row];
cellInfo.mypath = indexPath;
cell = cellInfo.cell;
return cell;
}
CellInfo和SectionInfo对象只是包装器。 sectionInfo包含CellInfo对象的数组,该对象再次包含该单元格。无论我初始化哪个部分和单元格,视图都会按预期绘制。
当我稍后在一个部分添加一个单元格,并调用[tableViewController.tableView reloadData];时,没有任何反应。在“cellForRowAtIndexPath”和“numberOfRowsInSection”中设置断点,表明当我将表视图拖出视线时会调用“cellForRowAtIndexPath”,但是“numberOfRowsInSection”永远不会被再次调用。这可能是问题吗?
我也试过这样的东西:
NSArray* a = [NSArray arrayWithObjects: [NSIndexPath indexPathForRow:2 inSection:0], [NSIndexPath indexPathForRow:3 inSection:0], [NSIndexPath indexPathForRow:2 inSection:1], [NSIndexPath indexPathForRow:3 inSection:1], nil];
[tableViewController.tableView insertRowsAtIndexPaths:a withRowAnimation:UITableViewRowAnimationNone];
也没有触发任何断点。如果您需要更多信息,请告诉我。我希望我只是失明,你可以发现错误。
答案 0 :(得分:2)
也许这样做:
[tableViewController.tableView beginUpdates];
[tableViewController.tableView insertRowsAtIndexPaths:a withRowAnimation:UITableViewRowAnimationNone];
[tableViewController.tableView endUpdates];
来自Apple doc:
在endUpdates返回表之后查询查询其数据源和 像往常一样委托行和部分 数据
我通常只需使用reloadData来显示新的行/部分(确保numberOfRow& numberOfSection返回正确数量的项目)。
希望这有帮助。
答案 1 :(得分:0)
好的,对不起,但我的问题没有涵盖我犯的错误。问题是,我缺少设置对我的控制器类的引用。我有时会遇到这个问题,来自提供NullPointerExceptions的语言。因此,如果某些东西不起作用,我对每个人的唯一建议就是检查每个正确初始化的东西。很抱歉让任何人看到这个问题都可以工作。