2016-11-16 99 views
0

我有两个tableview控制器和一个详细视图下钻tableview应用程序。数据模型是一个包含11个子类的类,每个数据段都有一个子类。所有的子类属性都是字符串或包含一个字符串数组。没有空的属性。所有的子类都具有相同的属性,但是其子类唯一的数据。我的想法是使用didSelectRow方法获得一个indexpath.row整数,我将用它初始化相应的子类,并通过segue将其传递到第二个tableview控制器,该控制器将包含详细视图所需的所有数据。我知道如何使用segue来传递数据集合。但是,传递整个子类似乎涉及不同的方法。不知道如何解决这个问题。我是否需要在第二个视图控制器中初始化一个类,该类具有与子类相同的属性类型但不包含数据?第二个表视图控制器中的初始化事件将发生在viewWillLoad方法中。我的假设是有人可能知道更好的方法。通过segue传递子类的最佳方式是什么?

+0

“我知道如何使用segue来传递数据集合,但是传递整个子类似乎涉及到不同的方法。”为什么?除非它血淋淋的地狱般巨大,或者初始化速度很慢,那么感觉到的问题是什么?换句话说,你的问题背后的动机是什么。 – Gruntcakes

+0

向下钻取应用程序用于呈现具有11个部分的NH证据规则。大约有70多条规则。我以前的模型是一个嵌套字典,它的工作。我不得不初始化整个字典。字典初始化速度并不慢。我认为对这11个部分中的每一个进行子类化将是一种更好的方式来利用分层数据,更容易跟踪,更容易使用和更容易搜索。我不是为了生活而编程,所以我一直在学习。任何想法都表示赞赏。 –

+0

听起来像你想传递的类实际上只是数据的表示?在这种情况下,您可以研究走向不同的路线 - 将数据类移动到模型(如模型 - 视图 - 控制器设计模式中),并使模型对两个视图控制器均可用。 (如果第一个VC需要将某些东西传递给第二个VC,它可以指示第二个VC需要访问什么数据,而不是完整的副本或引用,第二个VC将访问模型中的类/数据) – Gruntcakes

回答

0

将数据从View控制器传递到另一个控件的标准方法是使用委托。声明一个自定义协议,它具有您需要从第二个View控制器访问的功能和属性。这样你将与第二个视图控制器共享类实例。您可以在源视图控制器中实现该协议,并在执行该搜索后将源视图控制器的引用传递到第二个视图。您将在源视图控制器中声明的函数prepare(for segue:UIStoryboardSegue,sender:Any?)中设置委托。这个函数在调用performSegue之后被调用。希望这会帮助你。

+0

您是指以下内容:http://stackoverflow.com/a/26089243/5521145我的另一个想法是通过performSegue将indexpath.row整数传递给第二个视图控制器中的变量并在switch语句中使用它。匹配索引会初始化正确的子类。无论如何,这似乎是学习如何使用自定义协议的好机会。我会尝试一下。谢谢! –

+0

这取决于你。我认为这位代表是苹果风格,在我看来,更优雅。但最终它是关于哲学的 – Sergiob

相关问题