繁体   English   中英

根据UITableView和UICollectionView出队

[英]Dequeuing as per UITableView and UICollectionView

我想在自己的类中使用UITableView和UICollectionView中的出队模型,在这里将其称为CustomControl 我的目标是回收视图控制器而不是视图,但是我认为原理是相同的。 我对设计的想法是:

  • 使用者是CustomControl实例myCustomControldataSource
  • 使用者告诉myCustomControl它想要对某个字符串标识符使用哪种视图:

    [myConstomControl registerClass:[UIViewController class] forCellWithReuseIdentifier:@"StandardViewController"]; [myConstomControl registerClass:[SomeCustomController class] forCellWithReuseIdentifier:@"CustomController"];

  • CustomControl在NSDictionary- -(void)registerClass:(Class)viewControllerClass forCellWithReuseIdentifier:(NSString *)identifier { [self.classRegister setObject:viewControllerClass forKey:identifier]; }捕获此信息-(void)registerClass:(Class)viewControllerClass forCellWithReuseIdentifier:(NSString *)identifier { [self.classRegister setObject:viewControllerClass forKey:identifier]; } -(void)registerClass:(Class)viewControllerClass forCellWithReuseIdentifier:(NSString *)identifier { [self.classRegister setObject:viewControllerClass forKey:identifier]; }

  • myCustomControl刷新时,它将向datasource询问控制器。 datasourcemyCustomControl中使控制器出队,并传入所需的类型作为字符串标识符。 UIViewController *controller = [myCustomControl dequeueViewControllerWithIdentifier:@"StandardViewController"];
  • myCustomControl回收或创建存储在字典中的类型的控制器,然后将其返回到datasource ,在该datasource中对其进行自定义并返回到myCustomControl以进行显示。

我欢迎对此模式发表评论,但对我来说似乎可行。 我不确定是否邻接出队部分:

  • 当需要为给定的字符串标识符创建或重用控制器时,我将需要为每个标识符单独设置一组回收的控制器,或者使用其他方法来回收正确的控制器类型。 我想当标识符首次注册时,我可以创建一个自定义NSSet来存储该类型的控制器,但是我不确定如何动态标记,以便以后可以通过标识符找到它。 还是应该使用单个队列并尝试查找正确类型的东西? 鉴于此模式的目的,这似乎可能会对性能产生影响。
  • 如何创建Class类型的对象?

有一个可变字典来保存数据。 关键字是“标识符”,而对象是一个新类的自定义对象,例如:reuseInfo。

自定义对象可以具有一个类名,即VC数组。

调用register方法后,您可以向字典中添加键,并使用类名和空数组(Mutable)创建自定义类

  • 调用Dequeue方法时,获取键对象,检查VC数组。 如果为空,则创建一个vc并返回。
  • 为此,请使用UIViewController的子类,并具有私有属性“ isReadyForReuse”和方法“ PrepareForReuse”。 编写自己的逻辑以确定VC是否准备好重用。 -在出队(如果存在阵列)的情况下,检查是否有任何可重用的VC,如果没有,则将新的VC添加到阵列中,然后返回VC。 如果可重用,则调用方法“准备重用”并返回vc。

VC可以覆盖准备重用,以清理属性和其他值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM