2011-03-30 13 views
0

私は、標準のUIViewベースのウィンドウで始まるiPhoneプロジェクトを持っています。ユーザーがボタンをクリックすると、UITabBarControllerを使って新しいビューを起動しようとします。あなたがログインした後、iTunes Connectアプリが動作するようになります。 Appleのマニュアルには、私が望むことをするサンプルコード例はありませんが、Appleが独自のアプリケーションでそれを行っているため、可能性があります(別の例として、iPhone用のMobileMe iDiskアプリ)。既存のプロジェクトにUITabBarControllerを追加するにはどうすればいいですか?

私はすでに標準の-presentModalViewController:animated:メソッドを試しましたが、UITabBarController内にアタッチできるビューがないために動作しませんでした。

次に、私はApp Delegate内で2つのウィンドウXIBを使用して、そのアプローチを代わりに使用できるかどうかを確認します。

私がこの小さな問題に答える方法を知っていれば、私はどんな洞察もありがとうと思います。 =)

+0

このQは申し訳ありませんが、UITabBarControllerの作成方法はわかりますか? –

答えて

1

私は何をやってしまったことはこれです:私のアプリの委任で

、私は私のインターフェイスに次き:

@interface myAppDelegate : NSObject <UIApplicationDelegate> { 
    UIWindow * window; 
    LauncherViewController * startup; 
    UITabBarController * tabs; 
} 
@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) IBOutlet LauncherViewController * startup; 
@property (nonatomic, retain) IBOutlet UITabBarController * tabs; 
@end 

私の実装ファイルでは、私はアプリ起動機能に以下を追加します:

- (BOOL)application:(UIApplication *)application 
     didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // Override point for customization after application launch. 

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

    NSNotificationCenter * notifier = [NSNotificationCenter defaultCenter]; 

    [notifier addObserver:self 
       selector:@selector(launch) 
        name:MyAppLoginInitializedNotification 
        object:nil]; 

    [notifier addObserver:self 
       selector:@selector(logout) 
        name:MyAppLogoutNotification 
        object:nil]; 

    return YES; 
} 

- (void) launch { 
    [self.startup.view removeFromSuperview]; 
    [self.window addSubview:tabs.view]; 
    [self.window makeKeyWindow]; 
} 

- (void) logout { 
    [self.tabs.view removeFromSuperview]; 
    [self.window addSubview:startup.view]; 
    [self.window makeKeyWindow]; 
} 

私のメインのXIBには、標準のUIVie LaContherViewControllerと汎用UITabBarControllerとして定義されたwController。私のメインランチャーコントローラがユーザーの資格情報を認証してMyAppLoginInitializedNotificationを送信するとすぐに、アプリケーションデリゲートがランチャーからタブビューに切り替わり、私のアプリケーションロジックを続行できます。

0

UITabBarControllerが本当にUIViewControllerだけのサブクラスなので、-presentModalViewController:animated:は動作するはずです:

UITabBarController *someController = [[UITabBarController alloc] init]; 
someController.viewControllers = /* your View Controllers here */ 
[self presentModalViewController:someController animated:NO]; 
+0

私はUIViewControllerサブクラスを構築し、UIBabControllerをXIBの内部に追加しました。最初にビューを定義しなければコンパイルされず、いくつかの異なるオプションを試しました。 '-presentModalViewController:animated:'がうまくいかなかったと言ったとき、私は間違っていました。実際には動作しましたが、UITabBarControllerが表示されるとは思いませんでした。 – pmobley

0

私が正しくあなたの問題を理解していれば、あなたは、あなたの質問に言及した最初のビュー後にUITabBarControllerビューを開始したいですUITabBarControllerビューが表示される前に余分なビューを持っていることを除いて、あなたが必要としているのと同じことをするリンクを付けています。

http://www.mobisoftinfotech.com/blog/iphone/iphone-tabbar-uitabbarcontroller-tutorial/

+0

リンクをありがとう、私は必要なものを正しく理解しています。私の問題は、(Tab Bar Controllerが表示される前に)追加ビューを統合することです。 – pmobley

+0

あなたの問題はまだ解決されていませんか? –

0

私はあなたのnibファイルにUITabBarControllerを再度追加する必要はないと思います。コードで作成し、上記のポスターが追加されたら、それを追加してください。私にはうまくいくいくつかのコードがあります。この時点ティル

UITabBarController *nextController = [[UITabBarController alloc] init]; 

    FirstController *firstView = [[FirstController alloc] initWithNibName:@"FirstView" bundle:nil]; 
    SecondController *secondView = [[SecondController alloc] initWithNibName:@"SecondView" bundle:nil]; 
    ThirdController *thirdView = [[ThirdController alloc] initWithNibName:@"ThirdView" bundle:nil]; 

    [nextController setViewControllers:[NSArray arrayWithObjects:firstView, secondView, thirdView, nil] animated:NO]; 

それは同じでなければなりませんが、私が代わりにuinavgiationcontrollerにタブバーコントローラをプッシュしていますので、我々は異なる場合があります場所です。次のように私はそれを実行します。

[self.navigationController pushViewController:nextController animated:YES]; 
関連する問題