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

Как программно вызвать контроллер просмотра?

Я просмотрел все обучающие материалы, которые я могу найти на этом, и у меня все еще нет ответа. Мне нужно вызвать другое представление из кода. Я использую UIStoryboards. Я несколько раз менял представление, перетаскивая элемент управления из UIButtons, но теперь он должен быть из кода. Я пытаюсь вызвать информационную страницу из главного меню, если это первый раз, когда пользователь открыл приложение. Однако я не могу найти способ изменить представления из кода. Все мои представления контролируются одними и теми же файлами (ViewController2). identifier моего главного меню ViewControllerMain, а identifier информационной страницы ViewControllerInfo. Сначала я попробовал это:

[ViewControllerMain presentViewController: ViewControllerInfo 
                                 animated:YES 
                               completion: NULL];

Затем я попытался сделать разные UIViewControllers для каждого и сказать:

[ViewController2 presentViewController: ViewController 
                              animated:YES 
                            completion: NULL];

Ни один из них не работал. Для первого он говорит:

Использование незаявленного идентификатора ViewControllerMain.

Во втором, он говорит:

неожиданное имя интерфейса "ViewController": ожидаемый идентификатор.

Что я могу сделать?

4b9b3361

Ответ 1

Чтобы создать контроллер вида:

UIViewController * vc = [[UIViewController alloc] init];

Чтобы вызвать контроллер вида (должен быть вызван из другого диспетчера представлений):

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

Для одного используйте нуль, а не null.


Загрузка контроллера просмотра из раскадровки:

NSString * storyboardName = @"MainStoryboard"; 
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle: nil];
UIViewController * vc = [storyboard instantiateViewControllerWithIdentifier:@"IDENTIFIER_OF_YOUR_VIEWCONTROLLER"];
[self presentViewController:vc animated:YES completion:nil];

Identifier вашего контроллера просмотра либо равно имени класса вашего контроллера представлений, либо идентификатор раскадровки, который вы можете назначить в инспекторе идентификации вашей раскадровки.

Ответ 2

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

ViewControllerInfo* infoController = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerInfo"];
[self.navigationController pushViewController:infoController animated:YES];

В этом примере предполагается, что у вас есть контроллер навигации, чтобы вернуться к предыдущему виду. Вы можете, конечно, также использовать presentViewController: анимированный: завершение:. Главное, чтобы ваша раскадровка создала ваш контроллер целевого представления, используя идентификатор контроллера целевого представления.

Ответ 3

Swift

Это получает контроллер просмотра из раскадровки и представляет его.

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let secondViewController = storyboard.instantiateViewController(withIdentifier: "secondViewControllerId") as! SecondViewController
self.present(secondViewController, animated: true, completion: nil)

Измените имя раскадровки, имя контроллера контроллера и, при необходимости, проверьте идентификатор контроллера.

Ответ 4

Есть два способа сделать это:

1, создайте segue для вашего ViewController в вашей раскадровке, как описано в моем ответе здесь: Как выполнить сеанс, не связанный с вводом пользователя в iOS 5?

2, дайте свой ViewController и идентификатор и вызовите его, используя код в моем ответе здесь: Программный сценарий вызова сценария (без необходимости segue)?

Ответ 5

Вы можете вызвать ViewController таким образом, если вы хотите с помощью NavigationController

enter image description here

1. В текущем экране: Загрузка нового экрана

VerifyExpViewController *addProjectViewController = [[VerifyExpViewController alloc] init];
[self.navigationController pushViewController:addProjectViewController animated:YES];

2.1 В загруженном виде: добавьте ниже в .h файл

@interface VerifyExpViewController : UIViewController <UINavigationControllerDelegate>

2.2 В загруженном виде: добавьте ниже в .m файл

  @implementation VerifyExpViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.navigationController.delegate = self;
    [self setNavigationBar];
}
-(void)setNavigationBar
{
    self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
    self.navigationController.navigationBar.translucent = YES;
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"B_topbar.png"] forBarMetrics:UIBarMetricsDefault];
    self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor]};
    self.navigationItem.hidesBackButton = YES;
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Btn_topback.png"] style:UIBarButtonItemStylePlain target:self action:@selector(onBackButtonTap:)];
    self.navigationItem.leftBarButtonItem.tintColor = [UIColor lightGrayColor];
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Save.png"] style:UIBarButtonItemStylePlain target:self action:@selector(onSaveButtonTap:)];
    self.navigationItem.rightBarButtonItem.tintColor = [UIColor lightGrayColor];
}

-(void)onBackButtonTap:(id)sender
{
    [self.navigationController popViewControllerAnimated:YES];
}
-(IBAction)onSaveButtonTap:(id)sender
{
    //todo for save button
}

@end

Надеюсь, это будет полезно для кого-то там:)

Ответ 6

Основная логика этого: _,

NSString * storyboardIdentifier = @"SecondStoryBoard";

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardIdentifier bundle: nil];

UIViewController * UIVC = [storyboard instantiateViewControllerWithIdentifier:@"YourviewControllerIdentifer"];

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

Ответ 7

Импортируйте класс контроллера вида, который вы хотите показать, и используйте следующий код

KartViewController *viewKart = [[KartViewController alloc]initWithNibName:@"KartViewController" bundle:nil];
[self presentViewController:viewKart animated:YES completion:nil];

Ответ 8

        UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone_iOS7" bundle:nil];
            AccountViewController * controller = [storyboard instantiateViewControllerWithIdentifier:@"accountView"];
            //            [self presentViewController:controller animated:YES completion:nil];

        UIViewController *topRootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
        while (topRootViewController.presentedViewController)
        {
            topRootViewController = topRootViewController.presentedViewController;
        }

        [topRootViewController presentViewController:controller animated:YES completion:nil];