Как разработать приложение на основе TabBar с функцией входа в систему?

Я разрабатываю приложение, в котором мне нужно показать пользователю список в виде меню (Курсы, уроки, оценка, выход из системы). так что еще до этого мне нужно показать экран входа в систему. Только после успешного и действительного входа в систему мне нужно перенаправить пользователя в меню. Поэтому я планировал разработать приложение на основе tabBar с 4 вкладками. Здесь я запутался в том, как добавить контроллер вида входа в систему еще до загрузки контроллера TabBar. Я хочу, чтобы первая вкладка выбиралась каждый раз. На данный момент я добавляю мойTabBar controller в качестве администратора rootview для моегоAppDelegate window и затем представление контроллера вида входа в систему в качестве контроллера модального вида. Но проблема здесь еще доLogin View controller загружен, мой контроллер представления курсов загружен, потому что tabbarcontroller загружен первым. Мое действительное требование - мне нужно загрузить контроллер вида курса со списком курсов на основе входных данных, указанных в контроллере вида входа в систему. Но loadview контроллера представления курса загружается даже до представления загрузки контроллера представления входа в систему. так что мой список курсов всегда один и тот же, независимо от того, кто входит в систему. Я запутался здесь в том, как двигаться дальше ... Любое предложение здесь будет очень полезно ...

 Mat26 мая 2012 г., 13:36
Я предоставил вам краткий пример.
 Mat26 мая 2012 г., 12:25
См мойresponse на похожий вопрос, может быть, может помочь вам.
 Mat26 мая 2012 г., 12:39
Я имел в виду, что первое представление vc будет вашим loginVC как rootVC (теперь нет tabBar), затем вам нужно поменять rootVC с loginVC на tabBarVC и загрузить свои данные на основе ввода пользователя. Я не знаю, как Apple может понять, кто является rootVC, если вы начнете с шаблона на основе окна.
 Pradeep Reddy Kypa26 мая 2012 г., 12:51
Ваше предложение кажется верным, но не могли бы вы предоставить пример фрагмента кода или любую ссылку на учебник, где это разъясняется ... Было бы понятно, если я посмотрю на него. Большое спасибо Мат за ваше время. Ваше предложение было действительно другой идеей для меня ...
 Pradeep Reddy Kypa26 мая 2012 г., 12:30
@Mat: Но проблема здесь в том, что Apple настаивает на том, что TabBarcontroller является контроллером rootview ... В своем ответе вы упомянули, что отображаете контроллер вида входа в систему как контроллер корневого представления, а затем назначаете контроллер панели вкладок как контроллер rootview ... Вопрос в том, когда я нахожусь в контроллере представления входа в систему, как я могу добавить контроллер панели вкладок в качестве корневого контроллера представления в моем контроллере представления входа в систему?

Ответы на вопрос(3)

Решение Вопроса

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 (при условии, чтоnow 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 & apos; sinitWithNibName: self.title установить заголовок на вкладке элемента.

ере панели вкладок во время выполнения. Этого должно быть достаточно для ваших целей.

Я написал небольшой пример. Попробуйте войти со следующими учетными данными:

username: john, password: doe username: pete, password: poe

Вы увидите различную комбинацию вкладок в зависимости от используемого логина.

Пример можно скачать с моего Dropbox:http://dl.dropbox.com/u/6487838/LoginTabExample.zip

Просто добавьте следующий код в начале вашегоviewWillAppear: метод контроллера представления, который обычно появляется первым (скорее всего, тот виртуальный канал, который вы представляете на первой вкладке):

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

Где loginController - это, очевидно, контроллер представления, который управляет вашим экраном входа в систему. Если вы показываете это без анимации, это будет первое, что будет видно при запуске вашего приложения (после исчезновения изображения по умолчанию). Я использовал тот же метод, чтобы показать страницу отказа от ответственности, которую пользователь должен прочитать перед использованием приложения. Он работает просто отлично и добрался до магазина без проблем.

Edit: В этом решении, loginController должен закрыть себя после того, как пользователь успешно вошел в систему:

[self dismissModalViewControllerAnimated:NO]; //Although you might do this animated, this time
 26 мая 2012 г., 15:43
Конечно, вы должны проверить, необходимо ли сначала показывать логин. Вы можете сделать это, установив значение в NSUserDefaults, например. Другой причиной не показа имени входа может быть то, что приложение запоминает учетные данные и пользователю необходимо войти в систему только при первом запуске. Я не упоминал об этом, потому что думал, что ты все равно сделаешь что-то подобное ...
 Pradeep Reddy Kypa26 мая 2012 г., 15:28
Это совершенно неверно, так как метод viewWillAppear всегда будет вызываться при щелчке вкладок. В моем приложении у меня есть 4 вкладки, и когда пользователь меняет выбор вкладок, каждый раз вызывается метод viewWillAppear и каждый раз, когда выбирается вкладка, контроллер представления входа в систему называется .... так что это не должно быть правильным способом о том, как добавить контроллер представления входа в систему ...

Ваш ответ на вопрос