2012-06-04 3 views
0

Я создаю приложение iphone.iphone app - uitabbarcontroller всегда выбирает первый вид в uinavigationcontroller?

У меня есть элемент управления tabbar, который имеет 2 вкладки. Каждый tabitem связывается с другим навигационным контроллером. Каждый диспетчер навигации ссылается на иерархию контроллеров tableview. Когда пользователь нажимает на вкладку 1, затем нажимает на элемент в таблице, затем нажимает вкладку 2, а затем нажимает на tab1, приложение показывает таблицу, на которую он только что смотрел, прежде чем щелкнуть по tab2.

Как получить приложение, чтобы показать первую таблицу вкладки 1 каждый раз, когда он нажимает на вкладку 1 вместо того, чтобы показывать самую последнюю таблицу, на которую он смотрел, прежде чем покинуть tab1?

Я предпочел бы программное решение вместо использования раскадровки xcode. Но если их не существует, то решение для раскадровки тоже прекрасно.

ответ

0

в моем файле appdelegate.h, я изменил линию

@interface wscAppDelegate : UIResponder <UIApplicationDelegate> 

в

@interface wscAppDelegate : UIResponder <UIApplicationDelegate,UITabBarControllerDelegate> 

Тогда в моем CustomTabBarController в функции viewDidLoad я добавил следующие строки:

wscAppDelegate *appDelegate = (wscAppDelegate *)[[UIApplication sharedApplication] delegate]; 
self.delegate = appDelegate; 

Тогда в appdelegate.m файл, я добавил эту функцию

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController 
{ 
    for(int c=0; c<[tabBarController.viewControllers count]; c++) 
    { 
     UINavigationController * navcontroller = [tabBarController.viewControllers objectAtIndex:c]; 

     [navcontroller popToRootViewControllerAnimated:YES]; 
    }  

    return YES; 

} 
0

Вызовите popToRootViewControllerAnimated: на NavigationController, когда TabBarController изменит вкладку, которая отображается.

0

Попробуйте этот основной образец для создания UItabBar и UINavigationController для каждого UItabBarItem с нуля:

в файле заголовка (appdelegate.h), добавьте этот делегат:

@interface AppDelegate : UIResponder <UIApplicationDelegate,UITabBarControllerDelegate> 

в функции, называемой " didFinishLaunchingWithOptions», добавьте эту часть кода:

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

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

UINavigationController *navController=[[UINavigationController alloc] init]; 
m_ViewController1 = [[ViewController1 alloc] initWithNibName:@"ViewController1" bundle:nil]; 
[navController pushViewController:m_ViewController1 animated:NO]; 

UINavigationController *navController2=[[UINavigationController alloc] init]; 
m_ViewController2 = [[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:nil]; 
[navController pushViewController:m_ViewController2 animated:NO]; 

UITabBarController *mtabBarController = [[UITabBarController alloc] init]; 
mtabBarController.view.frame = CGRectMake(0, 0, 320, 460); 

// Set each tab to show an appropriate view controller 
[mtabBarController setViewControllers: [NSArray arrayWithObjects:navController1,navController1,navController2, nil]]; 

self.window.rootViewController = mtabBarController;  
mtabBarController.delegate = self; 
[self.window makeKeyAndVisible]; 

return YES; 
} 

Тогда в этой функции, не забудьте добавить FUNC popToRootViewControllerAnimated Тион:

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController 
{ 
    [m_ViewController1.navigationController popToRootViewControllerAnimated:YES]; 
    [m_ViewController2.navigationController popToRootViewControllerAnimated:YES]; 
    return YES; 
} 
+0

, какой файл имеет функцию '- (BOOL) tabBarController: (UITabBarController *) tabBarController shouldSelectViewController: (UIViewController *) viewController' появляются? – John