13

まだここで物事に頭を悩ませています。私は近くにいませんが、とにかく....Xcodeから作成されたTabBarアプリケーションがあります。それは動作します私は3つのタブビューを持っています、それは私が操作する方法などを知っています。

この全体の前に「ログイン」nibファイルを置き、ユーザーが(今のところハードコードされている)ユーザー名とパスワードに答える必要があります。それが正しければ、タブ部分をレンダリングして、クリックできるようにします。

ユーザー名とパスワードの部分を実行する別のアプリケーションを作成しましたが、そこからロジックを取得して、TabApplicationピースの前に配置するのに問題があります。

誰か提案がありますか?

4

4 に答える 4

17

AppDelegateで、application didFinishLaunchingWithOptionsメソッドの最後に次のように表示されます。

[window addSubview:tabcontroller.view];
[window makeKeyAndVisible];
return YES;

ログインビューコントローラを初期化し、次のようにタブコントローラの後に追加するだけです。

initialScreenViewController = [[InitialScreenViewController alloc] init];
[window addSubview:tabcontroller.view];
[window addSubview:initialScreenViewController.view];
[window makeKeyAndVisible];
return YES;

ビューコントローラにログインすると、ユーザーを認証した後、次のように非表示にできます。

[self.parentViewController.view setHidden:YES];

これにより、ログアウト機能がある場合に再度表示できます。

于 2010-12-10T06:57:54.653 に答える
16

標準的な方法は次のとおりです。

  • ログイン画面に関連するすべてのものを、UIViewControllerそれを管理するビューとサブクラスにパッケージ化します。
  • application:didFinishLaunchingWithOptions:呼び出して、アプリデリゲートでそのビューをモーダルに提示します

    LoginController*loginController= ... ; // create the view controller for the login screen
    [self.tabController presentModalViewController:loginController animated:YES];
    

このようにして、トランジションなどの間のアニメーションが自動的に処理されます。

正常にログインした後、後でそれを閉じることができます。それはLoginControllerによって内部から行うことができます

[self.parentViewController dismissModalViewControllerAnimated:YES];

ただし、ログインが完了したら、追加のセットアップを行う必要があることがよくあります。したがって、最初にアプリデリゲートにログインが完了したことを伝えてから、

[self.tabController dismissModalViewControllerAnimated:YES];

アプリデリゲートから。次に、そこで追加のタスクを実行できます。

アプリの代理人に連絡するために、を使用しますNSNotificationが、それはあなたにとって少し難しいかもしれません。

理解しやすいかもしれない(しかし私の好みには醜い)1つの方法は、たとえばloginDoneアプリデリゲートでメソッドを定義することです。次に、の中でLoginViewController、あなたはすることができます

MyAppDelegate*appDelegate=[[UIApplication sharedApplication] delegate];
[appDelegate loginDone];
于 2010-12-10T09:40:00.027 に答える
2

デフォルトのタブバーアプリケーションから始めている場合は、次のように実行できます。

  • MainWindow.xibで、パスワード画面に表示したいすべてのものを含むUIViewを作成します
  • AppDelegateのIBOutletsに必要なものをすべてフックし、パスワードが有効かどうかをチェックするメソッドを記述します。
  • applicationDidFinishLaunchingメソッドで、次のように置き換え[window addSubview:tabBarController.view];ます[window addSubview:/*whatever you called the view with the password stuff in it*/];
  • ユーザーが正しいパスワードを入力した場合は、次のようにします。

[passView removeFromSuperview]; [window addSubview:tabBarController.view];

そして、あなたは通常のタブバーアプリケーションにいるはずです。

于 2010-12-10T07:42:04.370 に答える
0

私は次のことをすることを好みます:

App DelegateのdidFinishLaunchingWithOptions

FirstViewController *viewController1 = [[FirstViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
SecondViewController *viewController2 = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
ThirdViewController *viewController3 = [[ThirdViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];

UINavigationController *navController1 = [[UINavigationController alloc] initWithRootViewController:viewController1];
UINavigationController *navController2 = [[UINavigationController alloc] initWithRootViewController:viewController2];
UINavigationController *navController3 = [[UINavigationController alloc] initWithRootViewController:viewController3];

self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = @[navController1, navController2, navController3];

LoginViewController *loginViewController = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
UINavigationController *loginNavController = [[UINavigationController alloc] initWithRootViewController:loginViewController];

self.window.rootViewController = loginNavController;

次に、認証コールバックを取得した後、アプリデリゲートに次のようなものを含めることができます。

- (void)setAuthenticatedState:(BOOL)authenticated
{
    if (authenticated == YES) {
        dispatch_async(dispatch_get_main_queue(), ^(){
            self.window.rootViewController = self.tabBarController;
        });
    }else{
        // Stuff
    }
}
于 2013-04-06T02:20:18.617 に答える