0

Я даже не уверен, что название правильное, но я не понимаю, как еще объяснить это, так что вот оно. Я покажу вам шаги, которые я делаю, чтобы вы поняли.Как получить RootViewController из UITabBarItem

Во-первых, я использую UITabBarController, где у меня есть три разных элемента.

1) Запускается приложение и он показывает мне первый элемент, который является UITableView

2) Я нажимаю на ячейки, и это заставляет меня детализировано клетки.

3) Я перейти оттуда в другое TabBarItem

4) Я вернуться обратно к первому TabBarItem и он все еще показывает мне вид из шага 3). Я НЕ хочу, чтобы я хотел показать мне первый вид с шага 1)

Как я могу это достичь?

+0

Таким образом, ваш контроллер панели вкладок загружает UITableView, как это первая вкладка. Вы нажимаете на ячейку в виде таблицы, которая выводит вас на подробный вид. Затем вы нажимаете на другую вкладку. Затем, когда вы нажимаете на первую вкладку, вы хотите, чтобы начальное представление таблицы отображалось вместо подробного представления? – toddg

+0

Точно это верно, @ToddGower –

ответ

2

вы можете реализовать UITabBarController метод делегата:

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

который позволит вам знать, когда выбрана вкладка.

Вы можете получить доступ к UIViewController сек вашего UITabBar использованием, если у вас нет ссылки на UIViewController с:

@property(nonatomic, copy) NSArray *viewControllers 

С этого захватить refence к соответствующему UIViewController (или UITableViewController), что вам хотите сбросить и вызвать:

- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated 

на это UINavigationController. Или создайте общедоступный метод для этого вызова как вызов popToRootViewController таким образом.

EDIT:

Ваш AppDelegate должен выглядеть следующим образом:

@interface AppDelegate() <UITabBarControllerDelegate> 
@end 

@implementation AppDelegate 


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; 
    tabBarController.delegate = self; 

    return YES; 
} 

- (void)tabBarController:(UITabBarController *)tabBarController 
didSelectViewController:(UIViewController *)viewController { 
    NSLog(@"was selecated"); 
} 
+0

Я реализовал метод UITabBarDelegate и написал NSLog @ «test», каждый раз, когда я нажимаю TabBarItem, ничего не появляется? –

+0

Вы подключили выход делегата от IB к вашему 'AppDelegate'? – random

+0

Есть ли какой-нибудь учебник для того, что вы написали в своем решении? Потому что я понятия не имею, о чем вы говорите. всякий раз, когда я использовал методы делегата, я помещаю делегат в себя. Никогда не подключался ничего к AppDelegate до –

2

Предполагая, что вы настроили контроллер панели вкладок в вашем AppDelegate, вы хотите, чтобы сделать его <UITabBarControllerDelegate>

И в вашем AppDelegate.m вы хотите реализовать этот метод, как это:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { 
    if ([viewController isKindOfClass:[UINavigationController class]]) { 
     [(UINavigationController*)viewController popToRootViewControllerAnimated:YES]; 
    } 
} 
Смежные вопросы