我收到我不明白的错误。我将UICollectionViewCell子类化如下:
CollectionViewCell.h
@interface CollectionViewCell : UICollectionViewCell
@property (weak, nonatomic) IBOutlet UILabel *txtLabel;
在视图控制器中,按如下方式使用它:
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
CollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath];
UICollectionViewCell *cellOne = [collectionView cellForItemAtIndexPath:indexPath];
使用CollectionViewCell的第一个调用会给出警告,而第二个则不会,并且它们都是同一类。选中该单元后,对其进行更改,并访问其中的数据。
对于带有CollectionViewCell的行的警告是“用类型为'UICollectionViewCell *'的表达式初始化'CollectionViewCell *'的不兼容指针类型”
如果它们都是同一个类,唯一的不同是iVar txtLabel,为什么它们的工作方式有所不同?
我正在尝试使用indexPath获取单元格。我假设这些单元格有一些存储,您可以使用传入的indexPath访问这些单元格。
Q1。我是否正确地假设我可以使用传入的indexPath来获取单元格?
Q2。为什么当一个人都在同一个 class 时,一个电话会起作用,而另一个人却不起作用?
最佳答案
CollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath];
方法
-cellForItemAtIndexPath:
定义为返回UICollectionViewCell
。编译器不知道实际返回的是CollectionViewCell
。您必须沮丧地告诉编译器您知道自己在做什么
CollectionViewCell *cell = (CollectionViewCell *) [collectionView cellForItemAtIndexPath:indexPath];
这将删除警告。不过,这只是一个警告。它会警告您可能存在的错误,但是代码可以正常工作。
关于ios - objective-c 子类化的iVar是否不具有相同的指针类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35857004/