可以在不同的类中使用委托和数据源? - 的UITableView

问题描述:

在使用的UITableView有两种类型的方法,即,数据源和代表仍都应该被连接到相同的父视图控制器类可以在不同的类中使用委托和数据源? - 的UITableView

有没有办法在指出错误的类定义委托和数据源?

我们为什么需要分离 - 作为代表和数据源?

注:这个问题适用于UICollectionView和类似物体

是你可以让他们在不同的班级。它们通常在同一个班,因为你可能需要在didSelectRowAtIndexPath使用数据(如数组)的委托方法里面,如:

泰伯维和的CollectionView数据源和委托是基于Delegate design pattern,在那里你可以委托一些工作,其他对象。

为什么你需要两种不同的协议?

因为数据源用于提供控制tableview/collectionview状态的数据,而委托提供行为并控制如何使用数据。

+0

这是如何可能的,因为我的tableview只包含在viewcontroller里面。哪些课程我想使用? – Saranjith

+0

你的tableview是内部视图控制器,它已经公开了两个代理属性(不同的协议),你可以在其中传递符合这些协议的任何类(对象)。 –

+0

可以请你再读一遍我的问题吗? – Saranjith

在一些特殊情况下,我会用两种不同的类来实现delegatedataSource方法。

例如:

在我的项目

,一些数据包含由一个实例(我们称之为全球用户 ),比如用户的文章,用户评论,用户的产品......

我做一个全局用户的实例类。在这门课上,当用户登录成功时,我有一些NSMutableArray用于用户的数据。 我从我的数据服务器请求他的数据并存储在这些数据Array中。

之后,当用户想看看他的产品,他会点击一些像my product按钮,然后推到MyProductListVC,在MyProductListVC,我有一个tableView初始化展示他的产品,但我不希望再次请求他的产品从我的数据服务器的数据,因为我在我的全球用户类他所有的产品数据,所以我做了tableViewdataSource向全球用户类,使delegateMyProductListVC,而这种逻辑正常工作在我的项目很长一段时间。这是我如何在不同的类中定义委托和数据源。

关于你的第二个问题:

Why we need seperation as delegates and datasources?

我回答这个问题,根据我的项目,首先,我希望所有的用户数据集中在一个班,这样方便我来管理用户的数据。第二,当我需要改变在视图中显示数据的方式时,我只需要更改MyProductListVC中的代码。

这就是我认为是最重要的:

我可以把所有的请求的方法在我的全球用户的课,我不想太多的请求码我MyProductListVC和任何其他VC,因为在我的项目,VC只需要显示数据,不需要请求。

+0

什么是你的全球课堂的基础课程? – Saranjith

+0

'NSObject' class –

+0

你可以在uitableview类中定义数据源,但我不会这样做,因为我不认为把请求数据方法放到uitableview类中是个好主意。 –

授权是子类别的“替代”。它对你的应用情况采用通用行为。

数据源只是提供要显示的数据。

显然有可能有这种情况,即两个视图具有相同的行为,但显示不同的数据。在这种情况下,为两个视图和两个不同的数据源分配一个代理(而不是在每个数据源方法的开头都有if)很方便。这意味着至少有一个视图具有不是其委托的数据源。

举个例子:你有一个表格视图来显示一个团队的球员。有一些额外的行为。你为此写了一个委托。然后你有一个有两个观点的窗口,一个是主队,一个是客队。

这两个视图都具有相同的行为适应代表和用于提供玩家的不同数据源。