self.collectionView和UICollectionViewCell.self之间的区别

时间:2017-07-26 10:37:55

标签: ios swift

我知道self.collectionView例如引用当前实例的属性。但是,当我遇到这种语法UICollectionViewCell.self时:

collectionView?.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "cellID")

来自apple doc:

func register(_ cellClass: AnyClass?, forCellWithReuseIdentifier identifier: String).
  

cellClass:要在集合视图中使用的单元格的类。

我很困惑语法实际上指的是什么?

5 个答案:

答案 0 :(得分:3)

您了解“self.collectionView”是指您在屏幕上创建并显示的集合视图。您(或界面构建器)创建该视图。 “self”,在这种情况下是包含集合视图的视图控制器。这是故事的一半 - 另一半是由系统完成的。

您的集合视图会逐个细胞地填充数据。您需要告诉您的集合查看要使用的单元格类型(它可以是自定义设计的单元格,也可以是普通的旧UICollectionViewCell)。你这样做的方法是“注册”你的细胞。这告诉集合视图在需要时创建哪种类型的单元格。

在我将它们组合在一起之前的最后一点:您可以在一个集合视图中使用不同类型的单元格。也许有些人有图像,有些单元格可能只是纯文本,有些可能有组合。这样做的方法是要求您注册具有相关ID的单元格,以便在需要单元格时更容易选择特定类型的单元格。

注册语法完成两件事。对于您想要使用的每种类型的单元格(通常只有一种),您可以注册所需的单元格类型。这就是“UICollectionViewCell.self”的用武之地。它可能是“MyCell.self”等。这里的.self只是意味着使用这个类作为模板来创建单元格。注册的第二部分是将标识符附加到模板/类以便于参考。

self.collectionView - self是视图控制器

UICollectionViewCell.self - self是要使用的单元格的“instancetype”。系统使用此信息为您构建单元格。

答案 1 :(得分:1)

如果TypeName继承自NSObject类,TypeName.self将返回TypeName的类型,这是NSObject类中的方法,如Abhishek建议的那样

- (instancetype)self;

如果您创建了一个子类,说 UICollectionViewCell

class CustomCell: UICollectionViewCell {
}

你会像这样使用它

collectionView?.register(CustomCell.self, forCellWithReuseIdentifier: "cellId")

这将返回CustomCell(instanceType或AnyClass)

希望它有所帮助。

答案 2 :(得分:0)

UICollectionViewCell.self是指您要用于单元格的类的类型。

UILocalNotification *notification = [[UILocalNotification alloc]init];
notification.repeatInterval = NSDayCalendarUnit;
[notification setAlertBody:Notitype];
[notification setFireDate:[NSDate dateWithTimeIntervalSinceNow:1]];
[notification setTimeZone:[NSTimeZone  defaultTimeZone]];
[[UIApplication sharedApplication] setScheduledLocalNotifications:[NSArray arrayWithObject:notification]];

答案 3 :(得分:0)

正如你写的那样

collectionView?.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "cellID")

这表示您即将使用预定义的collectionviewcell

当然,如果我们定义自定义单元格,那么我们将其写为

self.collectionView.register(UINib(nibName: "MyCollectionViewCell",bundle : nil), forCellWithReuseIdentifier: "MyCollectionViewCell")

当我们输入self.时指的是我们正在使用当前的类变量

答案 4 :(得分:0)

func寄存器(_ cellClass:AnyClass?,forCellWithReuseIdentifier identifier:String)。

此方法告诉集合视图它将重用哪个Cell Class的对象。这是您了解此方法签名的方法。

寄存器方法需要两个参数,一个是AnyClass,另一个是String。 AnyClass意味着您将传递其对象可以重用于集合视图单元格的类。您只需要提及对象的类型(Class),而不是任何特定的对象。

有关类型的详情,请参阅Types