我问的是非常基本的疑问属于Tableview,我在没有tableview
的情况下以编程方式创建了Storyboard/Xib
。
tableView
numberOfRowsInSection
它将返回14,单元格视图完全动态,每个单元格高度将彼此不同。
我的问题在于tableview
delegate
方法
static NSString *cellIdentifier = @"Cell";
UITableViewCell *cell=(UITableViewCell *)[tableview dequeueReusableCellWithIdentifier:cellIdentifer];
if (cell == nil )
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifer];
// how many time entering this loop
}
// ( adding subview to cell view).
cell==nil
表示需要输入正确的循环。取决于哪个参数单元格对象变为零?它会进入多少次,是一次吗?完全没有。
当我检查时,它进入了6次。
如果我使用cellIdentifier
,它将输入14次,因为Identifier
不同,每次它都会为单元格创建空间,它正确,因为每个时间名称都不同,滚动时会重复使用。“ / p>
NSString *cellIdentifer= [NSString stringWithFormat:@"%ld,%ld",(long)indexPath.section,(long)indexPath.row];
它将进入6次基础。为什么不是一次或14次。请说明我做错了什么。因为如果使用@“Cell”标识符,则滚动反复查看时会重叠。如果我使用第二个单元格视图对象将不会重叠&看起来很完美,但设备内存大小会增加
答案 0 :(得分:0)
如果我正确地提出了您的问题,您需要在viewDidLoad方法或loadView中注册您的类,您可以在其中创建类似[tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:CellIdentifier];
的表视图,以便在tableview中正确重用
答案 1 :(得分:0)
代码:1
static NSString *cellIdentifier = @"Cell";
UITableViewCell *cell=(UITableViewCell *)[tableview dequeueReusableCellWithIdentifier:cellIdentifer];
if (cell == nil ){
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifer];
// how many time entering this loop
}
在上面的代码中,循环将在第一次执行时作为tableview中可见行的数量执行。之后它将重用cell,因为cellIdentifier是相同的Cell
,你需要根据索引路径更新单元格数据。
这意味着如果你的表显示6行,那么它将执行6次。更改rowheight,您可以检查。
代码:2
NSString *cellIdentifer= [NSString stringWithFormat:@"%ld,%ld",(long)indexPath.section,(long)indexPath.row];
对于上面的代码,循环将执行您声明的总行数,因为它将为每个索引路径创建新的单元格。
答案 2 :(得分:0)
如果我们为所有单元格提供相同的标识符,则消失单元格将使用“显示单元格”的内存。但是,如果我们给出不同的标识符,那么每个单元都将拥有自己的内存位置并完美地显示数据。
现在假设我们在Table-view中加载1000条或更多条记录。如果我们将提供不同的标识符,内存中将有大量的分配。这是重复使用细胞的好处。
为什么要6次?
因为,如果您提供相同的标识符,表将重新使用单元格。此时可见的最大单元数首先被分配。然后在滚动时,出现的单元格使用消失单元格的存储位置(单元格出列)。因此,每次滚动时,都不会分配新的单元格。相反,已经分配的单元格被重复使用
为什么要14次?
因为,在这种情况下,每个单元格都有不同的标识符。每个单元格都有自己的内存位置。
<强>记住强>
在单元格nil条件中添加子视图。细胞特定内容应在零条件之外分配。看看下面的代码片段:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *cellIdentifier = @"MY_CELL";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
/* Everything that is similar in all cells should be defined here
like background colors, label colors, indentation etc. */
}
/* Everything that is row specific should go here
like label text, progress view progress etc. */
return cell;
}
答案 3 :(得分:0)
使用相同的标识符:
当表格单元格消失时,这个单元格将被添加到堆栈中,这些单元格可以重复使用。
现在,当我们要展示一个单元格时: 如果我们使用相同的标识符,那么控制器将检查该单元是否在具有相同标识符的堆栈中可用。
如果是,那么我们将获得一个已经使用的表格单元格,并且已经为该单元格设置了UI。因此我们需要在使用之前重置UI。
如果没有,那么它将创建新单元并尝试使用它。
在你的情况下,我认为4-5表格单元格一次可见,因此它创建了6个表格单元格并重新使用这些单元格。
使用不同的标识符: 在为不同的索引路径创建单元格时,表格单元格在堆栈中不可用。所以它会创造新的。因此,细胞方法将被调用14次。