我对xcode很新,我正在用这个代码来填充带有注释标题的表格视图,但是函数被多次调用,表格单元格被所有重复的值填充,如何在xcode中调用函数,如何我可以阻止此功能被多次调用
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
NSLog(@"this is a test text ");
NSMutableArray *annotations = [[NSMutableArray alloc] init];
int i=0;
if(indexPath.section == 0)
{
for(iCodeBlogAnnotation *annotation in [map annotations])
{
i++;
NSLog(@"this is the no %d",i);
[annotations addObject:annotation];
}
cell.textLabel.text = [[annotations objectAtIndex:indexPath.row] title];
}
return cell;
}
任何帮助都将深表感谢, 感谢您的帮助
答案 0 :(得分:2)
你无法真正控制它的召唤时间。每次你的tableview想要显示一个新单元格时都会调用它。您可以使用indexPath确定要放入该单元格的内容。屏幕上每个单元格至少调用一次(如果表格上下滚动,有时会更多)。
每次调用此函数时都不需要创建临时数组,只需直接使用[map annotations]
:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// There will be one row per annotation
return [[map annotations] count]
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
// Put the text from this annotation into this cell
cell.textLabel.text = [[[map annotations] objectAtIndex:indexPath.row] title];
return cell;
}
我希望我理解你的问题。如果没有,请在下面的评论中告诉我!
答案 1 :(得分:1)
这不是一个功能,它是一种方法。
当表视图绘制单元格时,它由表视图调用。每个单元格将调用一次,有时每个单元格调用一次,具体取决于用户正在做什么。
您不会将数据推送到表格视图中,而是要求您提供单元格内容。
问“我怎么能阻止这个函数不止一次被调用?”表示您不理解表视图(如果您来自UI编程的“推送”模型,则会令人困惑)。从TableView programming guide开始。
答案 2 :(得分:0)
只要UITableView没有特定索引路径的UITableViewCell并且需要一个,就会调用该函数。请注意,对于索引路径,可能会多次调用它,因为用户滚动(为了节省内存,屏幕外的单元格可能会被重用或释放)或调用reloadData
及相关函数或{{1}和相关的功能。你不能(并且真的不想)阻止它被多次调用。
也就是说,假设insertRowsAtIndexPaths:withRowAnimation:
返回某种有序的集合,每次都以相同的方式排序,你的代码应该做你想要的(即使效率非常低)。关于这个问题的更多细节会有所帮助。