2

我有1个主UIViewController包含UITabBarController。标签栏控制器有4个UIViewControllers(每个由UINavigationControllers管理)。简单地说,它看起来像这样:管理NSNotification与UITabBarController交互

 
MainViewController 
    | 
    |--- FirstUIViewController 
    | 
    |--- SecondUIViewController 
    | 
    |--- ThirdUIViewController 
    | 
    |--- FourthUIViewController 

FirstUIViewController默认加载。

在SecondUIViewController中,有一个可能发生的事件。该事件具有与其一起传递的特定数据。发生此事件时,我想要发生两件事:

1)FourthUIViewController在标签栏控制器中被选中,以直观显示已输入的不同标签。

2)在FourthUIViewController中选择特定UITableViewCell的后续操作。所选单元格由事件中传递的数据确定。

为了做到这一点,我在MainViewController中创建了一个NSNotification观察者。它从SecondUIViewController监听事件,并通过userInfo从它获取数据。

我也知道,从MainViewController我可以很容易地在UITabBarController上设置selectedIndex,以便显示正确的选项卡。 (#1完成)。

然而,完成#2让我感到困惑。我不知道如何(正确,正确地)设置选项卡栏的selectedIndex,然后使FourthUiViewController对所选单元格执行操作。我的假设是FourthUIViewController在事件发生之前可能没有被加载,所以我不能设置任何参数或调用任何观察者。

也许更广泛的问题是,当通过选项卡选择加载UIViewController时(与推送新的UIViewController非常简单相比),数据如何传递。

TIA。

回答

0

如果需要,可以有许多收件人通知。为什么不让你的其他视图只听同样的通知,并根据UserInfo选择所需的表格。

我明白吗?

+0

我相信其他视图控制器可能不会在事件被引发时被初始化(并且因此将无法听到事件)。这是假设视图控制器初始化,直到他们的选项卡被选中。 – pschang 2010-08-23 18:51:50

+0

在这种情况下,可以使用NSUserDefaults来传递此信息。您将UserData写入NSUserDefaults,并在新的视图首次加载时从该空间入手。一旦加载,它可以监听通知中的数据。 – 2010-08-23 21:37:21

1

该视图控制器将始终在启动时加载,除非您对NIB文件做了一些非常奇怪的事情。

这有可能是控制器的观点不会被加载,但你可以强制通过调用[fourthController view](或者,如果合适的话,[self view]),你操纵该视图的表之前发生。