5

Pracuję nad projektem w celu-c dla ios, i mam widok z wieloma zakładkami za pomocą podklasy UITabBarController. Każda karta ma swój własny kontroler UINavigationController. Gdy widok ładuje się na karcie, uruchamiane są odpowiednie zdarzenia aktywacyjne (viewWillAppear, viewDidLoad itp.). Jednak po dotknięciu innej karty i kliknięciu wstecz, nie wszystkie te zdarzenia zostaną ponownie uruchomione, ponieważ widok jest już widocznym widokiem dla tej konkretnej karty (np. ViewDidLoad).NSNotification lub Delegate, aby zarejestrować się, gdy widoczny widok zmienia się

Moje pytanie brzmi: czy istnieje powiadomienie lub delegat, na który mogę się po prostu zarejestrować i otrzymać powiadomienie, gdy widoczny widok w oknie zmieni się? Zrobiłem trochę badań i nie znalazłem nic konkretnego. Co mam zamiar zrobić to:

  1. Sprawdź widoczny widok gdy zakładka zmiany indeksów bar: TabBarController: didSelectViewController
  2. rejestracji dla tego zdarzenia na każdym kontrolerze nawigacji: navigationController: didShowViewController: animowane:

W ten sposób powinienem być powiadamiany za każdym razem, gdy zmienia się widzialViewController przez zmianę karty lub nawigację w obrębie przepływu nawigacji tabulatora (z wyjątkiem modałów, w tym przypadku nie obchodzą mnie one, są już obsługiwane).

Czy to właściwe podejście?

Odpowiedz

1

Czy obejrzałeś UITabBarControllerDelegate? Metoda ta brzmi, czego szukasz:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 

Z dokumentacji:

In iOS v3.0 and later, the tab bar controller calls this method regardless 
of whether the selected view controller changed. In addition, it is called only 
in response to user taps in the tab bar and is not called when your code 
changes the tab bar contents programmatically. 

Oto link: http://developer.apple.com/library/ios/#documentation/uikit/reference/UITabBarControllerDelegate_Protocol/Reference/Reference.html

nadzieję, że pomoże!

0

Najpierw zaimplementuj metodę delegata UITabBarController "tabBarController: didSelectViewController" i zarejestruj się w delegacie aplikacji. Nie można zarejestrować się w każdym kontrolerze nawigacyjnym. Tylko jeden obiekt może być delegatem. W tej metodzie typecast go do UINavigationController.

Następnie pobierz UIViewController, wywołując "topViewController" na tym UINavigationController. Następnie wywołaj metodę viewWillAppear: bezpośrednio na nim.

+0

Dzięki. Niedługo to zrobię - mam kilka innych wad, żeby wyjść. :) –