リストをメニュー(コース、レッスン、グレード、ログアウト)としてユーザーに表示する必要があるアプリケーションを開発しています。そのため、この前でもログイン画面を表示する必要があります。ログインが成功して有効になった場合にのみ、ユーザーをメニューにリダイレクトする必要があります。だから私は4つのタブを持つtabBarベースのアプリケーションを開発することを計画しました。ここでは、TabBarコントローラーがロードされる前でもログインビューコントローラーを追加する方法について混乱しています。毎回最初のタブを選択したい。今のところ、私はTabBarコントローラーをrootviewcontrollerとしてAppDelegateウィンドウに追加し、ログインビューコントローラーをモーダルビューコントローラーとして表示しています。しかし、ここでの問題は、LoginViewコントローラーの前でもありますが読み込まれると、タブバーコントローラーが最初に読み込まれるため、コースビューコントローラーが読み込まれます。私の実際の要件は、LoginViewコントローラーで指定された入力に基づいてコースのリストをコースビューコントローラーにロードする必要があることです。ただし、ログインビューコントローラのロードビューの前でも、もちろんビューコントローラのロードビューがロードされます。ですから、私のコースのリストは、誰がログインするかに関係なく常に同じです。私はここで前進する方法について混乱しています...ここでの提案は非常に役立ちます...
3 に答える
rootViewControllerをいじる必要はありません...
ビューコントローラのメソッドの先頭に、通常は最初に表示される次のコードを追加するだけですviewWillAppear:
(ほとんどの場合、最初のタブに表示しているVC)。
[self.tabBarController presentModalViewController:loginController animated:NO];
ここで、loginControllerは、明らかにログイン画面を管理するViewControllerです。アニメーションなしで表示すると、アプリの起動時に最初に表示されます(デフォルトの画像が消えた後)。同じ方法を使用して、ユーザーがアプリを使用する前に読む必要のある免責事項ページを表示しました。それはうまく機能していて、問題なく店に着きました。
編集:このソリューションでは、ユーザーが正常にログインした後、loginControllerはそれ自体を閉じる必要があります。
[self dismissModalViewControllerAnimated:NO]; //Although you might do this animated, this time
したがって、非常に簡単な例は次のようになります。あなたには、loginViewController
次のようなメソッドが必要です。
//Call this after the user has done with the login
-(IBAction)remove:(id)sender{
AppDelegate *del=(AppDelegate*)[[UIApplication sharedApplication] delegate];
//Set some data based on the user's input (eg some property shared in the AppDelegate)
//del.dataEnterByTheUser=someData;
[del removeLoginView];
}
次に、あなたの中で(今がであるとAppDelegate
仮定して)、次のようにすることができます(遷移を最適化できます):rootViewController
loginViewController
-(void)removeLoginView{
UITabBarController *tabVC=[[UITabBarController alloc] init];
ViewController *v1=[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
//v1.data=self.dataEnterByTheUser;
ViewController *v2=[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
NSArray *arrayVC=[NSArray arrayWithObjects:v1,v2, nil];
[tabVC setViewControllers:arrayVC];
[tabVC setSelectedViewController:0];
CGRect rectVC=self.loginViewController.view.frame;
rectVC.origin.y=self.view.frame.size.height;
[UIView animateWithDuration:0.3f delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
self.loginViewController.view.frame=rectVC;
} completion:^(BOOL finished){
[self.loginViewController.view removeFromSuperview];
self.loginViewController=nil;
self.window.rootViewController=tabVC;
}];
}
また、各 viewControllers に設定しinitWithNibName:
てself.title
、tabItem にタイトルを設定することを忘れないでください。
実行時にタブ バー コントローラーのビュー コントローラーの配列を変更するだけです。それはあなたの目的には十分なはずです。
小さな例を書きました。次の認証情報でログインを試みます。
- ユーザー名:
john
、パスワード:doe
- ユーザー名:
pete
、パスワード:poe
使用するログインに応じて、異なる組み合わせのタブが表示されます。
サンプルは私の Dropbox からダウンロードできます: http://dl.dropbox.com/u/6487838/LoginTabExample.zip