鉴于UITableViewCell的indexPath
,我想知道该单元格当前是否存在。
我知道如何检查它是否在屏幕上(使用tableView.indexPathsForVisibleRows
)。但是,我也想知道它是否在屏幕外但已经创建(假设用户已滚动但尚未进入屏幕)。
我该怎么做?
答案 0 :(得分:10)
你可以做到
[self.tableView cellForRowAtIndexPath:indexPath];
(不要与数据源方法[self tableView:cellForRowAtIndexPath:]
混淆),如果存在该索引路径的单元格,则返回该单元格。否则,您将获得nil
。
你绝对不希望你的后台更新过程直接引用单元格,因为正如你所说,它可能已经滚动屏幕并在获取完成时被回收。相反,保持对索引路径的引用或可用于查找索引路径的某些数据,然后使用该索引路径和上述方法来检索单元格。
答案 1 :(得分:2)
存在的唯一单元格是当前可见的单元格。当单元格在视图外滚动时,单元格对象可供UITableViewCell dequeueReusableCellWithIdentifier
method使用,这是操作系统在处理大量表格数据时如何节省内存,以便在如此少量的实际内容中显示房地产。
如果你想跟踪已经看过哪些单元格,你应该修改底层对象,以便在将对象数据提供给应用程序“{{中的表格视图单元格时设置某种BOOL或值。 1}}“方法。
答案 2 :(得分:2)
如果您按dequeueReusableCellWithIdentifier:
重复使用单元格,则tableView将像传送器一样执行。已经滚动屏幕的单元格将立即转移到将要进入屏幕的单元格。从理论上讲,tableView不会为您创建超过屏幕的单元格。因此,想要了解屏幕上的单元格是没有意义的。
UITableViewCell
只是根据MVC Pattern的观点。您的模型和数据决定了特定indexPath中特定单元格中应该存在的内容。你的代码可能会是这样的:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// dequeue a cell
// ...
if (!cell)
{
// init a cell
// ...
}
// for a given indexPath, decide what should be presented in the cell, something like updating the cell's properties
cell.textLabel.text = [self.data dataShouldBePresentedAtIndexPath:indexPath];
}
答案 3 :(得分:0)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// dequeue a cell
// ...
if (cell == nill)
{
// init a cell
// ...
}
// for a given indexPath, decide what should be presented in the cell, something like updating the cell's properties
cell.textLabel.text = [self.data dataShouldBePresentedAtIndexPath:indexPath];
}
你可以检查细胞是否存在....希望这有效......:)
答案 4 :(得分:0)
或者你也可以这样做
-(BOOL) isRowPresentInTableView:(int)row withSection:(int)section
{
if(section < [self.tableView numberOfSections])
{
if(row < [self.tableView numberOfRowsInSection:section])
{
return YES;
}
}
return NO;
}
答案 5 :(得分:0)
在 Swift 3
中let YOURINDEXPATH = IndexPath(row: 4, section: 0)
if tableView.cellForRow(at: YOURINDEXPATH) != nil {
// DO YOUR STUFFS HERE
}
相应地定义索引路径(YOURINDEXPATH)