我正在使用UITabBarController来跟踪应用的不同视图。在一个视图中,“测验控制器”,我让用户从分段控件中选择数字,然后将它们的答案存储在整数数组中。在底部是一个“提交”按钮,当按下该按钮时,应该调用另一个视图中的函数以使用“结果控制器”显示结果。我的问题是,如何处理类方法以允许分析结果并在“测验控制器”调用时在“结果控制器”中设置UILabel?
我点击提交按钮的代码如下所示:
[ResultViewController calculateAndDisplayScores];
// swtich to results view
mainDelegate.tabBarController.selectedIndex = 2;
其中“ResultViewController”是我的“结果控制器”的名称。当我这样做时,ResultViewController给我一个错误,我认为我不能在类方法中设置UILabel文本属性。
答案 0 :(得分:0)
你真的不想要一个类方法。您希望某种方式通知生活在标签栏控制器中的ResultViewController
的特定实例以更新自身。编译器抱怨你,因为你在类上调用你的方法,而不是特定的实例。
根据您发布的代码,最简单,最丑陋的方法似乎是:
[(ResultViewController*)[mainDelegate.tabBarController.viewControllers objectAtIndex:2] calculateAndDisplayScores];
// switch to results view
mainDelegate.tabBarController.selectedIndex = 2;
但这样做的正确方法可能是拥有信息所在的某种模型对象。您的数据输入UI与模型通信以获取当前数据,并推回用户的编辑。然后,模型可以通知任何感兴趣的各方(如结果视图控制器)新数据可用,并且他们应该相应地更新自己。该通知可以通过委托关系,使用NSNotificationCenter
或您梦寐以求的其他方式来完成。
(为了论证,假设这确实是一个类方法。在Objective-C中的类实际上没有状态,那么类方法如何保留结果,或者更新你的UI?)