什么时候调用cellForRowAtIndexPath方法?

时间:2016-04-05 06:06:35

标签: ios objective-c uitableview

何时调用此方法?假设我在屏幕上可以看到4个我的tableview单元格,那么这个方法将被调用多少个单元格。此外,如果一个单元是部分可见的,那么在这种情况下是否也会为下一个单元调用该方法?

P.S。我没有被困在任何地方,所以显示一些代码没有任何意义。这只是一个根本性的疑问。

7 个答案:

答案 0 :(得分:5)

我可以给你的最简单的解释是 - cellForRowAtIndexPath,当一个单元格即将显示在你的视图控制器的屏幕上时会调用。所以

时这个条件有效
  • 正在重新加载Tableview [tableview reloadData],因此每个单元格将再次出列/填充。
  • 每次滚动并即将看到一个新单元格。 UITableview使用离开视图的单元格(可见区域),并使用该特定单元格填充新数据。
  • numberOfRows之后。如果您的View Controller在故事板中有一个tableview。这在viewDidLoad中被调用,因为当VC检查故事板中的tableview时,它将首先调用强制tableview数据源numberOfRows,然后它会调用cellForRowAtIndexpath,那段时间,屏幕中可见的单元格数。

希望可以解决你的困惑。

答案 1 :(得分:1)

This method will called for the number of time for your number of cell visible.

Suppose current 4 cell visible(row0,row1,row2,row3). it call for 4 time.

when you scroll and now again visible 4 cell like (row2,row3,row4,row5). It again for 4 time for row 2...5. 

So this method will call for each visible cell in tableview every time when your scroll table.

答案 2 :(得分:0)

只要tableview显示单元格,就会调用此方法。

e.g。如果表格显示4个单元格,则cellForRowAtIndexPath将调用4次,当您滚动tableView时,此方法将再次调用。

只要创建或重复使用

cellForRowAtIndexPath就会调用。

答案 3 :(得分:0)

每次您的单元格创建static const Size patterSize(8, 6); vector<Vec2f> corners1 = { { 4362.5f, 473.445f },{ 4398.2f, 870.585f },{ 4432.4f, 1264.15f },{ 4467.0f, 1652.41f },{ 4500.4f, 2036.37f },{ 4533.1f, 2416.87f },{ 4565.3f, 2792.2f },{ 4596.8f, 3164.32f },{ 4001.4f, 534.995f },{ 4039.3f, 934.814f },{ 4076.0f, 1331.22f },{ 4112.5f, 1723.f },{ 4148.2f, 2110.53f },{ 4183.1f, 2493.87f },{ 4217.6f, 2872.27f },{ 4251.4f, 3246.14f },{ 3633.6f, 596.604f },{ 3673.4f, 1000.05f },{ 3712.5f, 1399.71f },{ 3751.f, 1794.36f },{ 3791.5f, 2192.78f },{ 3826.6f, 2571.79f },{ 3863.f, 2953.15f },{ 3899.f, 3330.55f },{ 3258.5f, 659.839f },{ 3300.f, 1067.13f },{ 3342.3f, 1469.84f },{ 3386.4f, 1868.42f },{ 3425.0f, 2267.45f },{ 3463.8f, 2651.51f },{ 3502.9f, 3034.91f },{ 3542.0f, 3415.47f },{ 2877.1f, 724.695f },{ 2921.5f, 1135.48f },{ 2965.7f, 1541.77f },{ 3009.2f, 1943.08f },{ 3052.1f, 2340.24f },{ 3094.4f, 2732.48f },{ 3136.5f, 3119.85f },{ 3177.9f, 3502.21f },{ 2488.0f, 791.248f },{ 2535.4f, 1204.72f },{ 2582.f, 1614.45f },{ 2628.3f, 2019.17f },{ 2673.7f, 2419.54f },{ 2718.5f, 2814.48f },{ 2763.3f, 3204.62f },{ 2807.5f, 3589.85f } }; vector<Vec2f> corners2 = { { 4362.7f, 473.381f },{ 4398.f, 870.536f },{ 4432.4f, 1263.96f },{ 4467.2f, 1652.29f },{ 4500.6f, 2036.31f },{ 4533.3f, 2416.81f },{ 4565.4f, 2792.2f },{ 4597.0f, 3164.33f },{ 4001.5f, 534.915f },{ 4039.f, 934.763f },{ 4076.2f, 1331.17f },{ 4112.6f, 1722.9f },{ 4148.3f, 2110.53f },{ 4183.f, 2493.79f },{ 4217.7f, 2872.22f },{ 4251.6f, 3246.17f },{ 3633.f, 596.545f },{ 3673.f, 999.967f },{ 3712.6f, 1399.65f },{ 3751.0f, 1794.31f },{ 3791.f, 2193.16f },{ 3826.7f, 2571.76f },{ 3863.4f, 2953.13f },{ 3900.0f, 3330.48f },{ 3258.6f, 659.74f },{ 3300.8f, 1066.98f },{ 3342.4f, 1469.8f },{ 3386.5f, 1868.34f },{ 3425.2f, 2267.81f },{ 3463.9f, 2651.4f },{ 3502.9f, 3034.95f },{ 3542.1f, 3415.42f },{ 2877.3f, 724.687f },{ 2921.6f, 1135.42f },{ 2965.8f, 1541.69f },{ 3009.3f, 1943.02f },{ 3052.1f, 2340.18f },{ 3094.4f, 2732.46f },{ 3136.5f, 3119.82f },{ 3178.0f, 3502.2f },{ 2488.1f, 791.197f },{ 2535.4f, 1204.66f },{ 2582.1f, 1614.38f },{ 2628.4f, 2019.2f },{ 2673.7f, 2419.53f },{ 2718.6f, 2814.43f },{ 2763.3f, 3204.61f },{ 2807.6f, 3589.8f } }; vector<vector<Vec3f>> objectPoints; objectPoints.push_back(vector<Vec3f>()); for (int row = 0; row < patterSize.height; row++) { for (int col = 0; col < patterSize.width; col++) { //int num = (row*patterSize.width + col) * 3; objectPoints.at(0).push_back(Vec3f(col, row, 0)); } } vector<vector<Vec2f>> imagePoints1; imagePoints1.push_back(vector<Vec2f>()); for (int row = 0; row < patterSize.height; row++) { for (int col = 0; col < patterSize.width; col++) { int num = (row*patterSize.width + col); imagePoints1.at(0).push_back(corners1.at(num)); } } vector<vector<Vec2f>> imagePoints2; imagePoints2.push_back(vector<Vec2f>()); for (int row = 0; row < patterSize.height; row++) { for (int col = 0; col < patterSize.width; col++) { int num = (row*patterSize.width + col); imagePoints2.at(0).push_back(corners2.at(num)); } } Mat cameraMatrix = Mat::eye(3, 3, CV_64F); Mat distCoeffs = Mat::zeros(5, 1, CV_64F); vector<Mat> rvecs, tvecs; calibrateCamera(objectPoints, imagePoints1, Size(6000, 4000), cameraMatrix, distCoeffs, rvecs, tvecs); cout << cameraMatrix << endl; calibrateCamera(objectPoints, imagePoints2, Size(6000, 4000), cameraMatrix, distCoeffs, rvecs, tvecs); cout << cameraMatrix << endl; 方法时都会被调用。

假设你有4个单元格,那么cellForRowAtIndexPath方法会调用 4次

答案 4 :(得分:0)

重新加载tableView时将调用cellForRowAtIndexPath方法,并且将在numberOfRowsInSection方法中调用返回的行数。

答案 5 :(得分:0)

-(UITableViewCell *)tableView:(UITableView *)tableView  cellForRowAtIndexPath:(NSIndexPath *)indexPath

这是tableView的数据方法。 最初会调用所有可见单元格,尽管单元格部分可见,但它将被调用。

考虑一下你是否有10个细胞是可见的。首先它将被调用5个单元格,当你向下滚动其他单元格时,它将被调用下一个可见单元格。

您可以refer了解更多详情。

答案 6 :(得分:0)

只要单元格被击中,此方法就会调用...

即如果有5个单元格将被调用5次方法,并且在滚动tableview时它将再次点击基于Resuse单元格标识符方法......