1

これらのタブを使用して2つのView Controllerをロードするために、アプリに2つのタブを追加しました

  • Tab1 : ホーム
  • Tab2 : お気に入り

だから私はこれを達成するために以下のコードを書いた

アプリ内デリゲート

AppDelegate.h

@class ViewController,FavViewController;

@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;

@property (strong, nonatomic) ViewController *viewController;
@property (strong, nonatomic) FavViewController *favViewController;

@property (strong, nonatomic) UITabBarController *tabBarController;

@end

AppDelegate.m

       @implementation AppDelegate

        @synthesize window = _window;
        @synthesize viewController;
        @synthesize favViewController;
        @synthesize tabBarController;

        - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

        baseTabBarController = [[UITabBarController alloc]init];

        baseTabBarController.delegate=self;

        viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]; 
        UINavigationController *homeView = [[UINavigationController alloc]initWithRootViewController:viewController];  

        favViewController = [[FavViewController alloc] initWithNibName:@"FavViewController" bundle:nil];
        favViewController.title = @"My Favourite";
        UINavigationController *favouriteView = [[UINavigationController alloc] initWithRootViewController:favViewController];  


        NSArray *controllers = [NSArray arrayWithObjects:homeView,favouriteView, nil];  
        baseTabBarController.viewControllers = controllers; 

        [self.window addSubview:baseTabBarController.view]; 
        [self.window makeKeyAndVisible];    

        return YES;
    }

    - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)selectedViewController
{

    if (tabBarController.selectedIndex == 0) {




   }else if (tabBarController.selectedIndex == 1) {

    [(FavViewController *)[(UINavigationController*)selectedViewController topViewController] getData];

    }else if (tabBarController.selectedIndex == 2) {

        NSLog(@"2");
    }


}

ここに私が得ている結果画面があります

ここに画像の説明を入力

だから私はこれで問題を抱えています..

次の画面に切り替えると、最初のタブで最初の画面 (ホーム画面) が読み込まれず、現在の画面のままになります。

例で試してみましょう

私のアプリには、A、B、C、D と言う 4 つの画面があります。

A 画面と C 画面のタブを追加しました。これらはアプリ全体 (すべての画面) で使用できます。

アプリを起動して A -> B-> C -> D に移動し、[ホーム] タブ (A) を押すと、画面 A が読み込まれず、現在の画面のままになります。

しかし、良いことは、別のタブC(私のお気に入り)で同じプロセスを実行すると、正しい画面がロードされることです。

編集: @sanjitが私に提案したように、 didSelectViewControllerメソッドを実装しましたが、区別できないという点で、今回はどのタブがタップされていますか?

よろしくお願いします!! 誰かが私を正しい方向に向けることができれば

4

3 に答える 3

3

Tabbar デリゲートを使用し、uiviewcontroller のパラメーター インスタンスを使用して poptorootviewcontroller メソッドを呼び出します。それがあなたのために働くことを願っています。次のコードを試してください

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
UINavigationController *navController = (UINavigationController*)tabBarController.selectedViewController;

[navController popToRootViewControllerAnimated:YES];
}
于 2013-01-23T12:19:33.200 に答える
0

コードを置き換える

[viewController setTabBarItem:tab1];
[favViewController setTabBarItem:tab2]; 

[[tabbarController tabBar] setItems:[NSArray arrayWithObjects:tab1,tab2, nil]];

それは解決するはずです。

于 2013-01-23T12:09:14.387 に答える