Ios UICollectionViewDataSource,UIView中的UICollectionViewDelegate
我已经用Ios UICollectionViewDataSource,UIView中的UICollectionViewDelegate,ios,objective-c,uicollectionview,Ios,Objective C,Uicollectionview,我已经用UICollectionView创建了一个UIView 在UIView的接口声明中,我遵守了UICollectionViewDataSource,UICollectionViewDelegate协议: @interface TestOverview : UIView <UICollectionViewDataSource, UICollectionViewDelegate> 为了澄清方法collectionView:numberOfItemsInSection位于UIV
UICollectionView
创建了一个UIView
在UIView
的接口声明中,我遵守了UICollectionViewDataSource
,UICollectionViewDelegate
协议:
@interface TestOverview : UIView <UICollectionViewDataSource, UICollectionViewDelegate>
- 为了澄清方法
位于collectionView:numberOfItemsInSection
(TestOverview)中,该方法被声明为UIView
的委托。那么,为什么它希望在包含UICollectionView
的UICollectionView
的UIView
UIViewController(TestScreenViewController)中接收它呢李>
UICollectionView
的代理。这就是他们在那里的目的。其次,不仅需要声明TestOverview
实现了UICollectionViewDataSource
和UICollectionViewDelegate
协议,还需要告诉UICollectionView
实例它们的委托和数据源分别是谁。您可以在如下代码中执行此操作:
self.collectionView.delegate = self;
self.collectionView.dataSource = self;
或者在Interface Builder中,通过将数据源和委托项绑定到
TestOverview
首先,最好使用视图控制器作为UICollectionView
的委托。这就是他们在那里的目的。其次,不仅需要声明TestOverview
实现了UICollectionViewDataSource
和UICollectionViewDelegate
协议,还需要告诉UICollectionView
实例它们的委托和数据源分别是谁。您可以在如下代码中执行此操作:
self.collectionView.delegate = self;
self.collectionView.dataSource = self;
或者在界面生成器中,通过将数据源和委托项绑定到
TestOverview
,用户viewcontroller作为collectionview委托比uiview更好
self.collectionView.delegate = self;
self.collectionView.dataSource = self;
使用viewcontroller作为collectionview委托比使用uiview更好
self.collectionView.delegate = self;
self.collectionView.dataSource = self;
我猜你把它联系错了。您将委托和数据源绑定到nib中的视图了吗?@tia我想是的。看这里:似乎您正在将它绑定到
TestScreenViewController
而不是TestOverview
。是的,它链接到文件的所有者。视图的文件所有者是视图控制器。这是正确的。您应该使用视图控制器。正如@frowing所说,您正在将其绑定到控制器。通过删除Outlets部分中的绑定来重新绑定它,并将其拖动到绑定到测试概述
视图。我猜您链接错了。您将委托和数据源绑定到nib中的视图了吗?@tia我想是的。看这里:似乎您正在将它绑定到TestScreenViewController
而不是TestOverview
。是的,它链接到文件的所有者。视图的文件所有者是视图控制器。这是正确的。您应该使用视图控制器。正如@frowing所说,您正在将其绑定到控制器。通过删除Outlets部分中的绑定来重新绑定它,并将其拖动到绑定到测试概述
视图。只需将协议内容移动到视图控制器,使界面看起来如下所示:@interface TestScreenViewController:UIViewController
,您应该很好。我不想拥有庞大的控制器类。我想把功能分开。我该怎么做?您需要将包含的控制器作为UICollectionView的委托,正如@frowing刚才所说的,这就是它的工作方式。简单地说,在良好的OOD中,成员的所有者控制其访问。不仅如此,如果实现的一部分在不同的文件中,它还会使您的代码几乎无法读取。@Dev2rights谢谢。我理解,包含的控制器应该是UICollectionView的委托。但是我想在其他地方包含所有与UICollectionView相关的代码,这样UIViewController就不会膨胀。我该怎么做?你为什么要这么做?如果不将任何内容保存为单独的对象,则必须实例化,这意味着您需要在堆栈上分配两个对象,而不是一个会导致更多开销的对象。更不用说,根据文档,您的Supose并不是这样做的。只需将协议内容移动到视图控制器,使界面如下所示:@interface TestScreenViewController:UIViewController
,您应该很好。我不想拥有庞大的控制器类。我想把功能分开。我该怎么做?您需要将包含的控制器作为UICollectionView的委托,正如@frowing刚才所说的,这就是它的工作方式。简单地说,在良好的OOD中,成员的所有者控制其访问。不仅如此,如果实现的一部分在不同的文件中,它还会使您的代码几乎无法读取。@Dev2rights谢谢。我理解,包含的控制器应该是UICollectionView的委托。但是我想在其他地方包含所有与UICollectionView相关的代码,这样UIViewController就不会膨胀。我该怎么做?你为什么要这么做?如果不将任何内容保存为单独的对象,则必须实例化,这意味着您需要在堆栈上分配两个对象,而不是一个会导致更多开销的对象。更不用说,根据文档,你的上司并不是这样做的。