Подтвердить что ты не робот

iOS: представить контроллер представления программно

Я использую метод presentViewController:animated:completion: для перехода к другому контроллеру представления.

Это мой код:

AddTaskViewController *add = [[AddTaskViewController alloc] init];
[self presentViewController:add animated:YES completion:nil];

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

4b9b3361

Ответ 1

Если вы используете раскадровку, вы, вероятно, не должны использовать alloc и init для создания нового контроллера представлений. Вместо этого посмотрите на свою раскадровку и найдите сегу, которую вы хотите выполнить; он должен иметь уникальный идентификатор (а если нет, вы можете установить его на правой боковой панели).

После того, как вы найдете идентификатор для этого сеанса, отправьте текущему контроллеру представления сообщение -performSegueWithIdentifier:sender:

[self performSegueWithIdentifier:@"mySegueIdentifier" sender:self];

Это заставит раскадровку создать экземпляр AddTaskViewController и представить его так, как вы определили для этого сеанса.


Если, с другой стороны, вы вообще не используете раскадровку, вам нужно дать вашему AddTaskViewController какой-то пользовательский интерфейс. Наиболее распространенный способ сделать это - инициализировать контроллер с помощью nib: вместо вызова init вы вызовете -initWithNibName:bundle: и укажите имя файла .xib, который содержит ваш пользовательский интерфейс с добавленной стоимостью:

AddTaskViewController *add = [[AddTaskViewController alloc]
                              initWithNibName:@"AddTaskView" bundle:nil];
[self presentViewController:add animated:YES completion:nil];

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

Ответ 2

Если вы используете Storyboard и ваш "add" viewController находится в раскадровке, тогда установите параметры для вашего "add" viewcontroller в настройках, чтобы вы могли сделать что-то вроде этого:

UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"NameOfYourStoryBoard" 
                                                     bundle:nil];
AddTaskViewController *add = 
           [storyboard instantiateViewControllerWithIdentifier:@"viewControllerIdentifier"];

[self presentViewController:add 
                   animated:YES 
                 completion:nil];

если у вас нет вашего "add" viewController в раскадровке или файле nib и вы хотите создать все это программно, тогда appDocs говорит:

Если вы не можете определить свои представления в раскадровке или файле nib, переопределите метод loadView, чтобы вручную создать иерархию представления и присвоить ее свойству вида.

Ответ 3

Вам нужно установить идентификатор раскадровки из инспектору идентификации раскадровки

 AddTaskViewController *add=[self.storyboard instantiateViewControllerWithIdentifier:@"storyboard_id"];
 [self presentViewController:add animated:YES completion:nil];

Ответ 4

ваш код:

 AddTaskViewController *add = [[AddTaskViewController alloc] init];
 [self presentViewController:add animated:YES completion:nil];

этот код может перейти на другой контроллер, но вы получаете новый viewController, а не контроллер вашего раскадровки, вы можете сделать вот так:

AddTaskViewController *add = [self.storyboard instantiateViewControllerWithIdentifier:@"YourStoryboardID"];
[self presentViewController:add animated:YES completion:nil];

Ответ 5

Лучший способ -

AddTaskViewController * add = [self.storyboard instantiateViewControllerWithIdentifier:@"addID"];
[self presentViewController:add animated:YES completion:nil];

Ответ 6

Вот как вы можете это сделать в Swift:

let vc = UIViewController()
self.presentViewController(vc, animated: true, completion: nil)

Ответ 7

Попробуйте следующее:

NextViewController *nextView = [self.storyboard instantiateViewControllerWithIdentifier:@"nextView"];
[self presentViewController:nextView animated:YES completion:NULL];

Ответ 8

Попробуйте этот код:

[self.navigationController presentViewController:controller animated:YES completion:nil];

Ответ 9

LandingScreenViewController *nextView=[self.storyboard instantiateViewControllerWithIdentifier:@"nextView"];
[self presentViewController:nextView animated:YES completion:^{}];