gpt4 book ai didi

ios - UICollectionView 子类在多个 viewControllers 中重用

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:38:58 26 4
gpt4 key购买 nike

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

CustomCollectionView.h

@interface CustomCollectionView : UICollectionView <UICollectionViewDataSource, UICollectionViewDelegate>

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

@end

CustomCollectionView.m

#import "SSCalendarView.h"

@implementation SSCalendarView
@synthesize collectionView;

- (id)initWithFrame:(CGRect)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
  • 文件所有者的类也设置为 CustomCollectionView
  • 文件的所有者是 UICollectionView 的委托(delegate)和数据源

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

我的问题是:

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

最佳答案

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

您当前方法的问题是:

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

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com