我知道self.collectionView例如引用当前实例的属性。但是,当我遇到这种语法UICollectionViewCell.self时:
collectionView?.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "cellID")
来自apple doc:
func register(_ cellClass: AnyClass?, forCellWithReuseIdentifier identifier: String).
cellClass:要在集合视图中使用的单元格的类。
我很困惑语法实际上指的是什么?
答案 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