J'ai un UIViewController principal qui contient un UITabBarController. Le contrôleur de barre d'onglets a 4 UIViewControllers (chacun étant géré par UINavigationControllers). Succinctement, il ressemble à ceci:Gestion de NSNotification avec les interactions UITabBarController
MainViewController | |--- FirstUIViewController | |--- SecondUIViewController | |--- ThirdUIViewController | |--- FourthUIViewController
Le FirstUIViewController est chargé par défaut.
Dans SecondUIViewController, un événement peut se produire. Cet événement contient des données spécifiques qui lui sont transmises. Quand cet événement se produit, je veux que 2 choses se produisent:
1) Le quatrième contrôleur d'affichage à sélectionner dans le contrôleur de la barre d'onglets pour afficher visuellement un onglet différent a été entré.
2) Une action subséquente dans FourthUIViewController où un UITableViewCell spécifique est sélectionné. La cellule sélectionnée est déterminée par les données transmises dans l'événement. Pour ce faire, j'ai créé un observateur NSNotification dans MainViewController. Il écoute l'événement à partir du SecondUIViewController et obtient des données à partir de celui-ci via userInfo.
Je sais aussi que de MainViewController je peux facilement définir l'index selectedIndex sur le UITabBarController afin que l'onglet correct soit affiché. (# 1 accompli).
Cependant, l'accomplissement n ° 2 me déconcerte. Je ne sais pas comment (correctement, correctement) définir le selectedIndex de la barre d'onglets et ensuite avoir le FourthUiViewController agir sur une cellule sélectionnée. Mon hypothèse est que FourthUIViewController n'a peut-être pas été chargé avant que cet événement se produise, donc je ne pouvais pas définir de paramètres ou appeler des observateurs. Peut-être que la question plus générale est de savoir comment les données peuvent être transmises lors du chargement d'un UIViewController via la sélection d'onglets (par rapport à la mise en place d'un nouveau UIViewController qui est très simple).
TIA.
Je crois que l'autre contrôleur de vue peut ne pas être initialisé au moment où l'événement est lancé (et donc ne serait pas en mesure d'écouter l'événement). Cela suppose que les contrôleurs de vue sont initialisés jusqu'à ce que leur onglet soit sélectionné pour la première fois. – pschang
Dans ce cas, il peut être possible d'utiliser NSUserDefaults pour transmettre cette information. Vous écrivez les UserData à NSUserDefaults et la nouvelle vue inits à partir de cet espace lors du premier chargement. Une fois chargé, il peut écouter les données de la notification. –