我有一个
UICollectionView
,其中包含自定义单元格,内部有 UITextView
。
用户可以点击文本字段内的任何文本。当文本字段的高度大于单元格的大小时,单元格会建议集合视图重新加载自身。
-(void)updatedCell:(UICollectionViewCell*)cellToUp{
NSIndexPath *indexPath = [self.collectionView indexPathForCell:cellToUpdateSize];
BOOL animationsEnabled = [UIView areAnimationsEnabled];
[UIView setAnimationsEnabled:NO];
[self.collectionView reloadItemsAtIndexPaths:[NSArray arrayWithObject:indexPath]];
[UIView setAnimationsEnabled:animationsEnabled];
}
问题是,当单元格“重新加载”时,键盘会消失并再次显示,而没有任何与之关联的文本字段。 有什么办法可以避免键盘消失吗?
提前致谢。
您可以覆盖 UICollectionView 上的重新加载功能。
类似:
[super reloadData];
[textView becomeFirstResponder];
这样做:
collectionView.collectionViewLayout.invalidateLayout()
嗨,您可以使用
UICollectionView
方法performBatchUpdates(_:completion:)
来修改相关单元格的高度,而无需重新加载单元格。代码是这样的
[self.collectionView performBatchUpdates:^{
UICollectionViewCell *cell = [self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:currentRow inSection:currentSection]];
if (cell) {
cell.height = [[self.colHeightArray objectAtIndex:currentRow] floatValue];
}
} completion:^(BOOL finished) {
}];
希望这有帮助。