Связывать новый viewcontroller с раскадровкой? - PullRequest
28 голосов
/ 02 ноября 2011

Возможно, есть простое решение, но я не могу понять.

Я использую раскадровки для интерфейса.

Я начинаю с контроллера панели вкладок, но перед тем, как пользователю разрешено использовать приложение, пользователь должен аутентифицировать себя через окно входа в систему, которое модально выдвигается в начале.

Я хочу настроить вид входа в систему на той же раскадровке, но не могу определить, как связать контроллер представления в раскадровке и мой код.

Что я сделал:

  • Создание нового минимального файла подкласса UIViewController> новый> новый файл.
  • Перетащите новый UIViewController в раскадровку
  • Установить класс на вкладке пользовательского класса
  • перетаскивает UILabel для целей тестирования.
  • пробег

Без ярлыка ...

Ответы [ 3 ]

40 голосов
/ 04 ноября 2011

Наденьте новый UIViewController, который будет действовать как контроллер представления входа в систему на MainStoryboard. В инспекторе атрибутов измените идентификатор на LoginViewController (или что-то соответствующее). Затем добавьте

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"LoginViewController"];
    [vc setModalPresentationStyle:UIModalPresentationFullScreen];

    [self presentModalViewController:vc animated:YES];
}

в контроллер первого вида, и экран входа будет загружен с вашей раскадровки и представлен.

Надеюсь, это поможет.

6 голосов
/ 03 февраля 2013

Ответ Скотта Шервуда выше - самый правильный ответ, который я нашел после долгих поисков.Хотя очень незначительное изменение в соответствии с новым SDK (6.1), presentModalViewController показывает устаревший.

Здесь очень небольшое изменение, чтобы ответить выше.

 UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
    HomeViewController * hvc = [sb instantiateViewControllerWithIdentifier:@"LoginView"];
    [hvc setModalPresentationStyle:UIModalPresentationFullScreen];
    [self presentViewController:hvc animated:YES completion:nil]; 
1 голос
/ 12 декабря 2013

Я новичок в этой области. Но если первый контроллер представления является контроллером представления навигации, а его rootviewcontroller является контроллером представления таблицы. Если вы хотите нажать контроллер представления, такой как LoginViewController, при нажатии на ячейку, и вы также хотите вернуться к представлению таблицы с помощью панели навигации. Я рекомендую так:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath  {

   UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
   UIViewController *controller = [sb instantiateViewControllerWithIdentifier:@"LoginViewController"];
   [self.navigationController pushViewController:controller   animated:YES];
}

Таким образом, вы можете иметь навигацию.

Кстати, я не знаю, почему возникла такая проблема, которую вы задали. Я предполагаю, что когда loginviewcontroller создается в коде, его представление не является представлением в раскадровке. Если кто-то знает причину, скажите, пожалуйста! спасибо!

...