好奇,是否可以禁用UICollectionview
上的重用功能?
我的细胞数量有限,可能会有所不同,但细胞的重新初始化可能有点重,我最好不要重复使用它们。
尝试在没有dequeueReusableCellWithReuseIdentifier
的情况下初始化单元格我得到了异常:
NSInternalInconsistencyException',原因:'从collectionView:cellForItemAtIndexPath:返回的视图未通过调用-dequeueReusableCellWithReuseIdentifier:forIndexPath检索。
答案 0 :(得分:7)
细胞的重新初始化可能有点重
重置单元格的内容不太可能比创建新单元格更昂贵 - 单元格重用的全部要点是通过避免不断创建新单元格来提高性能。
尝试在没有dequeueReusableCellWithReuseIdentifier的情况下初始化单元格我得到了异常:
我认为这表明你的问题的答案是不。此外,the documentation says:
...集合视图要求您始终将视图出列,而不是在代码中显式创建它们。
再次,没有。
答案 1 :(得分:6)
要禁用单元格重用,只需使用该单元格索引路径的特定标识符对单元格进行出列,然后手动注册该标识符。
<%
Dim objConn
Session.Timeout=15
Set objConn=Server.CreateObject("ADODB.Connection")
objConn.ConnectionString="DSN=servername;Uid=Username;Pwd=Password"
objConn.Open
%>
请注意,在上述方法中重用并不是完全禁用,因为每个单元都有一个标识符,这是每个人可能需要的。但是,如果您需要完全禁用单元重用,则可以执行以下操作。
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
NSString *identifier = [NSString stringWithFormat:@"Identifier_%d-%d-%d", (int)indexPath.section, (int)indexPath.row, (int)indexPath.item];
[collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:identifier];
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
// ...
// ...
// ...
}
重要:我在这里回答这个问题,这完全是不推荐,特别是第二种方法。我在第一种方法中使用第一种方法来进行多方向滚动,并且有一些关于专注于tvOS的委托方法,我需要为每个单元调用它。