2

リストをメニュー(コース、レッスン、グレード、ログアウト)としてユーザーに表示する必要があるアプリケーションを開発しています。そのため、この前でもログイン画面を表示する必要があります。ログインが成功して有効になった場合にのみ、ユーザーをメニューにリダイレクトする必要があります。だから私は4つのタブを持つtabBarベースのアプリケーションを開発することを計画しました。ここでは、TabBarコントローラーがロードされる前でもログインビューコントローラーを追加する方法について混乱しています。毎回最初のタブを選択したい。今のところ、私はTabBarコントローラーをrootviewcontrollerとしてAppDelegateウィンドウに追加し、ログインビューコントローラーをモーダルビューコントローラーとして表示しています。しかし、ここでの問題は、LoginViewコントローラーの前でもありますが読み込まれると、タブバーコントローラーが最初に読み込まれるため、コースビューコントローラーが読み込まれます。私の実際の要件は、LoginViewコントローラーで指定された入力に基づいてコースのリストをコースビューコントローラーにロードする必要があることです。ただし、ログインビューコントローラのロードビューの前でも、もちろんビューコントローラのロードビューがロードされます。ですから、私のコースのリストは、誰がログインするかに関係なく常に同じです。私はここで前進する方法について混乱しています...ここでの提案は非常に役立ちます...

4

3 に答える 3

2

rootViewControllerをいじる必要はありません...

ビューコントローラのメソッドの先頭に、通常は最初に表示される次のコードを追加するだけですviewWillAppear:(ほとんどの場合、最初のタブに表示しているVC)。

[self.tabBarController presentModalViewController:loginController animated:NO];

ここで、loginControllerは、明らかにログイン画面を管理するViewControllerです。アニメーションなしで表示すると、アプリの起動時に最初に表示されます(デフォルトの画像が消えた後)。同じ方法を使用して、ユーザーがアプリを使用する前に読む必要のある免責事項ページを表示しました。それはうまく機能していて、問題なく店に着きました。

編集:このソリューションでは、ユーザーが正常にログインした後、loginControllerはそれ自体を閉じる必要があります。

[self dismissModalViewControllerAnimated:NO]; //Although you might do this animated, this time
于 2012-05-26T11:56:24.750 に答える
2

したがって、非常に簡単な例は次のようになります。あなたには、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仮定して)、次のようにすることができます(遷移を最適化できます):rootViewControllerloginViewController

-(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 にタイトルを設定することを忘れないでください。

于 2012-05-26T11:32:43.653 に答える
1

実行時にタブ バー コントローラーのビュー コントローラーの配列を変更するだけです。それはあなたの目的には十分なはずです。

小さな例を書きました。次の認証情報でログインを試みます。

  • ユーザー名: john、パスワード:doe
  • ユーザー名: pete、パスワード:poe

使用するログインに応じて、異なる組み合わせのタブが表示されます。

サンプルは私の Dropbox からダウンロードできます: http://dl.dropbox.com/u/6487838/LoginTabExample.zip

于 2012-05-26T14:21:17.273 に答える