2014-02-13 6 views
0

У меня есть приложение, у которого есть контроллер начального представления, который позволяет пользователю войти в систему. После входа пользователей в систему Я пытаюсь изменить представление на пользовательский контроллер панели вкладок, который имеет тип класса TabViewController. Проблема в том, что когда я переключаюсь на контроллер панели вкладок, экран черный, а нижняя панель вкладок - серая и пустая.Переключение с контроллера вида на пользовательский контроллер панели вкладок

Вот некоторый соответствующий код:

в ViewController.m (начальный журнал в виде)

- (IBAction)logInButtonClicked:(UIButton *)sender 
{ 
    TabViewController *tabView = [[TabViewController alloc] initWithSession:session]; 
    [self presentViewController:tabView animated:YES completion:nil]; 
} 

в TabViewController.m (класс, назначенный контроллер панели вкладок)

-(id) initWithSession: (Session*) s 
{ 
    self = [super init]; 

    if (self) 
    { 
     session = s; 
    } 

    return self; 
} 

Обратите внимание, что когда я выполняю инициализацию по умолчанию следующим образом:

TabViewController *tabView = [[TabViewController alloc] init]; 

Получаю тот же результат.

Как я могу заставить свой контроллер представления таблиц выглядеть так, как в моей раскадровке, при инициализации?

Раскадровка:

enter image description here

Что контроллер вид вкладки выглядит в тренажере:

enter image description here

ответ

1

Я не уверен, что это лучший способ, но это точное, что я в моем последнем приложении, и он отлично работает.

Попробуйте сделать контроллер панели вкладок контроллером корневого/начального представления вашего приложения.

По ссылке класса разработчиков Apple:

При развертывании интерфейса панели вкладок, вы должны установить этот вид, как корень вашего окна. В отличие от других контроллеров представлений интерфейс панели вкладок никогда не должен устанавливаться как дочерний элемент другого контроллера представления.

После этого, создать модальное SEGUE в раскадровке с панели вкладок контроллера представления в контроллере представления Логин, имя его «segueLogin» и назовите его вручную в методе viewDidAppear вашей панели вкладок класса контроллера представления.

if(!userHasLogin){ 
    [self performSegueWithIdentifier:@"segueLogin" sender:self]; 
} 
+0

[самоуправления performSegueWithIdentifier: @ отправитель "segueLogin": самостоятельно]; Это то, что мне нужно. Кроме того, что я делаю это из журнала, и, похоже, он работает нормально. –

+0

Приятно знать, что я могу помочь. Но если вы показываете контроллер отображения панели табуляции с помощью модального сегмента, я хотел бы предложить вам снова включить контроллер просмотра панели вкладок как «корень окна». Я не эксперт здесь, но я использовал, чтобы поставить контроллер отображения панели таблеток в контроллере просмотра навигации, и это вызвало у меня множество странных проблем. Во всяком случае, это зависит от вас. – AdrianHou

0

Вы должны создать свой TabViewController с-х UIStoryboard «s - (id)instantiateViewControllerWithIdentifier:(NSString *)identifier в вашем случае, создающей с [[TabViewController alloc] init] неправильно, вы не создавать все вкладки программно.

1

его очень легко,

я постараюсь, чтобы решить вашу проблему в два этапа.

шага 1-- выберите TabViewController в раскадровке и дать ему идентификатор (ниже класса из TabViewController таможенного)

шага 2--

- (IBAction)logInButtonClicked:(UIButton *)sender 
{ 
UIStoryboard *storyBoard=[UIStoryboard storyboardWithName:@"Your_Story_Board_Name" bundle:nil]; 
TabViewController *tabView = [storyBoard instantiateViewControllerWithIdentifier:@"TabViewController_Identifier_From_Storyboard"]; 
[self presentViewController:tabView animated:YES completion:nil];  
} 
Смежные вопросы