it-swarm.com.de

Wie rufe ich einen View Controller programmgesteuert auf?

Ich habe mir alle Tutorials angesehen, die ich hier finden kann, und ich habe immer noch keine Antwort. Ich muss eine andere Ansicht aus dem Code aufrufen. Ich verwende UIStoryboards. Ich habe die Ansicht viele Male durch Ziehen mit der Maus aus UIButtons geändert, aber jetzt muss sie aus dem Code stammen. Ich versuche, die Infoseite aus dem Hauptmenü aufzurufen, wenn der Benutzer die App zum ersten Mal öffnet. Ich kann jedoch keinen Weg finden, um die Ansichten aus dem Code heraus zu ändern. Alle meine Ansichten werden von denselben Dateien gesteuert ( ViewController2 ). Die identifier meines Hauptmenüs ist ViewControllerMain , und die identifier der Infoseite ist ViewControllerInfo . Zuerst habe ich es versucht:

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

Dann habe ich versucht, verschiedene UIViewControllers für jeden zu machen und zu sagen:

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

Weder funktionierte. Für das erste sagt es:

Verwendung des nicht deklarierten Bezeichners ViewControllerMain.

Im zweiten heißt es:

unerwarteter Schnittstellenname 'ViewController': erwarteter Bezeichner.

Was kann ich machen?

61
John Farkerson

So erstellen Sie einen View-Controller:

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

So rufen Sie einen View-Controller auf (muss von einem anderen View-Controller aus aufgerufen werden):

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

Verwenden Sie zum einen nil anstelle von null.


Laden eines View-Controllers aus dem Storyboard:

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 Ihres View-Controllers entspricht entweder dem Klassennamen Ihres View-Controllers oder einer Storyboard-ID, die Sie im Identity-Inspector Ihres Storyboards zuweisen können.

126

Sie müssen den Ansichtscontroller über das Storyboard instanziieren und dann anzeigen:

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

In diesem Beispiel wird davon ausgegangen, dass Sie über einen Navigationscontroller verfügen, um zur vorherigen Ansicht zurückzukehren. Natürlich können Sie auch presentViewController verwenden: animiert: Fertigstellung :. Der wichtigste Punkt ist, dass Ihr Storyboard Ihren Ziel-View-Controller mit der ID des Ziel-View-Controllers instanziiert.

20
tigloo

Schnell

Dadurch wird ein Ansichtscontroller vom Storyboard abgerufen und dargestellt.

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

Ändern Sie gegebenenfalls den Namen des Storyboards, den Namen des Controller-Controllers und die Controller-ID.

18
Suragch

Sie können ViewController auf diese Weise aufrufen, wenn Sie möchten mit NavigationController

enter image description here

1.Im aktuellen Bildschirm: Neuen Bildschirm laden

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

2.1 In geladener Ansicht: Füge unten in .h Datei hinzu

@interface VerifyExpViewController : UIViewController <UINavigationControllerDelegate>

2.2 In Loaded View: Fügen Sie unten in .m Datei hinzu

  @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

Hoffe, das wird für jemanden dort nützlich sein :)

5
swiftBoy

Es gibt zwei Möglichkeiten, dies zu tun:

1. Erstellen Sie in Ihrem Storyboard ein Segment für Ihren ViewController, wie in meiner Antwort hier erläutert: Wie führt man ein Segment durch, das nicht mit der Benutzereingabe in iOS 5 zusammenhängt?

2, Geben Sie Ihren ViewController und den Bezeichner an und rufen Sie ihn mit dem Code in meiner Antwort hier an: Storyboard-Szene programmgesteuert aufrufen (ohne Zuteilung)?

3
Darren

hauptlogik hinter diesem is_,

NSString * storyboardIdentifier = @"SecondStoryBoard";

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

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

[self presentViewController:UIVC animated:YES completion:nil];
1
        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];
0
suresh

Importieren Sie die View Controller-Klasse, die Sie anzeigen möchten, und verwenden Sie den folgenden Code

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