如何在xcode中调用该函数

时间:2011-06-14 16:28:29

标签: objective-c xcode ipad ios4

我对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;
}

任何帮助都将深表感谢, 感谢您的帮助

3 个答案:

答案 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:返回某种有序的集合,每次都以相同的方式排序,你的代码应该做你想要的(即使效率非常低)。关于这个问题的更多细节会有所帮助。