我正在开发我的第一个应用程序并且我已经勾勒出了UI,但在我向前推进之前,我已经遇到了一个绊脚石,这不是我一直在研究的教程。
Two issues I have:
1) Passing data between TableViewControllers
2) Conditional Segues
该应用使用CoreData,并在模型中包含3个托管对象的上下文:FocusArea
,Equipment
,& Activity
。
我的应用程序的一部分将有3个TableView,显示来自FocusArea
,Equipment
和&的结果。 Activity
。通过它们的导航将如下:
Step 1 -> Step 2 -> Step 3 -> save selections
focusAreaTVC -> equipmentTVC -> activityTVC -> saveVC
equipmentTVC -> focusAreaTVC -> activityTVC -> saveVC
activityTVC -> focusAreaTVC -> equipmentTVC -> saveVC
当在步骤1中选择项目/项目时,“下一步”按钮将前进到步骤2,显示在步骤1中选择的行可用的选项。一旦用户在步骤2中进行选择,剩余的可用选项将在步骤3中显示。我设想保存屏幕上的最终选择将保存为数组或字典。
问题:
1)视图控制器:我计划使用performSegueWithIdentifier
而不是使用9个不同的ViewControllers,所以我只需要为对象设置3个视图控制器,并找出完成转换的逻辑。
我会在AppDelegate
为每个步骤的TVC创建一个全局变量,并将逻辑放在performSequeWithIdentifier
内每个VC的switch语句中吗?
示例:
// AppDelegate variables start all nil, updated at each step, reset to nil on save
var step1VC = "equipmentVCUsed"
var step2VC = "focusAreaTVCUsed"
var step3VC = nil
// VC switch statement (contained in each TableViewController)
var segueIdentifier: String
switch segueName {
case step1TVC = "focusAreaTVC":
segueName = "equipmentTVC"
case step1TVC = "equipmentTVC:
segueName = "focusAreaTVC"
case step1TVC = "activityTVC":
segueName = "focusAreaTVC"
case step2TVC = "equipmentTVC":
segueName = "activityTVC"
case step2TVC = "focusAreaTVC", step1VC = "equipmentVC":
segueName = "activityTVC"
case step2TVC = "focusAreaTVC", step1VC = "activityVC":
segueName = "equipmentTVC"
case step3VC != nil,
segueName = "saveVC"
step1TVC = nil
step2TVC = nil
default:
println("Something so the the compiler doesn't yell at me")
}
2)我计划在步骤1中进行选择,然后将它们传递给步骤2的VC,进一步细化,转到步骤3.由于它们都在相同的上下文中工作,我可以从1个TVC传递选择到另一个或我是否需要创建一个列表,下一个VC将从中检索项目?
如何从步骤1到步骤3获取信息?我是否必须在segue之间保存数组中的选择并使用每个VC中的提取来优化它们?
答案 0 :(得分:0)
为什么不让表格视图单元格上的点击触发segue?换句话说,就像这样:用户从第一个表视图中选择选项 - >然后,用户看到第二个表格视图并从适当的选项集中进行选择 - >然后,用户可以看到第三个表视图,并从适当的选项集中进行选择。您始终可以在顶部放置一个后退按钮,以便用户可以返回并更改他/她的选择。
您的用户可能希望并期望您的应用行为如此。
无论如何,回答你的问题:
1)我建议您创建一个UIViewController超类,子类从该超类继承,然后在该类的.h文件中定义一个属性,该属性可以设置为包含每个视图控制器需要传递的数据的对象到下一个视图控制器。然后,使用prepareForSegue传递下一个视图控制器需要的数据。
2)您可以将选择从1个TVC传递到另一个(参见#1)
编辑:如果您需要任何澄清,或者如果您觉得我误解了您的问题,请随时发表评论。我昨晚睡了不到5个小时。