代码之家  ›  专栏  ›  技术社区  ›  Pinturikkio

在表格上滚动并在底部完成时,将单元格添加到表格视图

  •  0
  • Pinturikkio  · 技术社区  · 10 年前

    我在UIViewController中有一个tableView。当我加载viewController时,正在加载带有3个单元格的tableView。每次我在tableView上滚动并在其底部完成时,我都希望添加到它(其他)3个单元格中。facebook应用程序是如何做到的!请帮帮我!这是我在代码中所经历的(未添加单元格):

        -(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
        {
            //I created an int flag because this method (as soon as it initialize the 
            //table) is called 2 times (because when it load the viewController, is called
            // the method that populates the arrays that contain the details to be shown in
            // the cells and reload the tableView)
            if (_flagCells == 0 || _flagCells == 1) {
                _flagCells ++;
                return;
            }
    
            if([indexPath row] == ((NSIndexPath*)[[tableView indexPathsForVisibleRows] lastObject]).row){
    
    //phpClass is a class that contain scripts used to connect my app to script php for mySQL DB 
    //objsRequest is a method of phpClass that receive a query for input and return an array of //results of that query. cellsLimit represent the cells to be shown (Once every 3 to 3) and //numberOfDequeuedCells represent the number of cells to be added (every 3) that is SELECT .. //FROM .. LIMIT 0,3 .... LIMIT 3,3 .... LIMIT 6,3 ....           
    [_arrID addObjectsFromArray:[_phpClass objsRequest:[NSString stringWithFormat:@"SELECT ID FROM mii LIMIT %d,%d",_cellsLimit,_numberOfDequeuedCells]]];
    
                for (int i = (int)[_arrID count]-3; i < [_arrID count]; i++) {
    
    //objRequest is a method of phpClass that receive a query for input and return a string that 
    //represent the result of that query
                    [_arrNames addObject:[_phpClass objRequest:[NSString stringWithFormat:@"SELECT Name FROM mii WHERE ID = %@",_arrID[i]]]];
                    [_arrGen addObject:[_script objRequest:[NSString stringWithFormat:@"SELECT Gen FROM mii WHERE ID = %@",_arrID[i]]]];
    
    //getImg is a method of phpClass that receive the user ID for input and return an image
    //representing the user image
                    UIImage *img = [_phpClass getImg:_arrID[i]];
                        [_arrImgs insertObject:img atIndex:i];
    
    //Here is the problem because the rows doesn't be added to my tableView
                    [_tableView beginUpdates];
                    [_tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:i inSection:0]] withRowAnimation:UITableViewRowAnimationAutomatic];
    
                }
                _cellsLimit +=3;
                [_tableView endUpdates];
            }
        }
    
    1 回复  |  直到 10 年前
        1
  •  2
  •   Hermann Klecker    10 年前

    前段时间我自己做的。如果我没记错,那么我只是将其他数据加载到Array中,并将其用作表中数据的容器。加载数据后,我重新绘制表。就是这样。

    我认为你迷路了,只是因为你想做得更复杂。

    至于您的评论:

    [_tableView performSelector:@selector(reloadData) withObject:nil afterDelay:0.001];
    

     [_tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
    

    两者都应在另一个线程中执行reloadData,因此不应导致循环。然而,即使如此,您也应该在到达表末尾之前添加新数据。