• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - UICollectionView 子类可在多个 viewController 中重用

[复制链接]
菜鸟教程小白 发表于 2022-12-12 16:16:10 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我想创建一个自包含的 UICollectionView 子类(充当它自己的数据源和委托(delegate)),以便我可以将它加载到不同的 View Controller 中。到目前为止,这是我所拥有的:

CustomCollectionView.h

@interface CustomCollectionView : UICollectionView <UICollectionViewDataSource, UICollectionViewDelegate>

@property (weak, nonatomic) IBOutlet UICollectionView *collectionView;

@end

CustomCollectionView.m

#import "SSCalendarView.h"

@implementation SSCalendarView
@synthesize collectionView;

- (id)initWithFrameCGRect)frame {

    self = [super initWithFrame:frame];

    if (self) {

        [[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:self options:nil];

        [self registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier"Identifier"];

        [self addSubview:collectionView];
    }
    return self;
}

// Below are UICollectionViewDataSource and UICollectionViewDelegate methods

@end

CustomCollectionView.xib

  • 仅包含一个 View - UICollectionView。它的类设置为 CustomCollectionView
  • File's Owner 的类也设置为 CustomCollectionView
  • File's Owner 是 UICollectionView 的委托(delegate)和数据源

我知道我在这里有很多问题。但也许我们可以以此为起点。

我的问题是:

  • 如何正确实现这个子类?我想完全从 xib 加载 View
  • 首先,除了潜在的 MVC 违规(这个子类会做所有事情)之外,UICollectionView 可以作为自己的数据源和委托(delegate)吗?
  • 如果以上可行,我如何正确创建此子类的实例以在我的 View Controller 中使用?



Best Answer-推荐答案


已经存在一个可以用于此目的的对象 - UICollectionViewController。这可以被子类化并添加到任何 View Controller (作为 subview Controller ),并且已经包含一个 Collection View ,它是数据源和委托(delegate)。

您当前方法的问题是:

  • 正如您所指出的,通过将 View 作为其自己的数据源和委托(delegate),您将过多的责任放在一个对象上
  • xib 的文件所有者不能是 xib 中的对象。当您加载 xib 时,您发送给 owner 参数的对象是文件的所有者。我不知道您最终使用您当前拥有的代码最终会得到什么。
  • 我不知道你为什么坚持使用 xib - 除了额外文件的头痛和 nib 加载的复杂性之外,这会给你带来什么?只需创建一个 Collection View Controller ,您可以在 init 和 viewDidLoad 方法中指定布局和注册单元格。

关于ios - UICollectionView 子类可在多个 viewController 中重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19883127/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap