Ich habe mir alle Tutorials angesehen, die ich zu diesem Thema finden kann, und ich habe immer noch keine Antwort. Ich muss eine andere Ansicht aus dem Code aufrufen. Ich benutze UIStoryboards
. Ich habe die Ansicht viele Male durch Ziehen mit gedrückter Ctrl-Taste geändert UIButtons
, aber jetzt muss sie aus dem Code stammen. Ich versuche, die Infoseite über das Hauptmenü aufzurufen, wenn der Benutzer die App zum ersten Mal geöffnet hat. Ich kann jedoch anscheinend keinen Weg finden, die Ansichten des Codes zu ändern. Alle meine Ansichten werden von denselben Dateien gesteuert ( ViewController2 ). Das identifier
Hauptmenü ist ViewControllerMain und das identifier
der Infoseite ist ViewControllerInfo . Zuerst habe ich das versucht:
[ViewControllerMain presentViewController: ViewControllerInfo
animated:YES
completion: NULL];
Dann habe ich versucht, UIViewControllers
für jeden etwas anderes zu machen und zu sagen:
[ViewController2 presentViewController: ViewController
animated:YES
completion: NULL];
Beides hat nicht funktioniert. Zum ersten heißt es:
Verwendung des nicht deklarierten Bezeichners ViewControllerMain.
Im zweiten heißt es:
unerwarteter Schnittstellenname 'ViewController': erwartete Kennung.
Was kann ich tun?
quelle
Antworten:
So erstellen Sie einen Ansichtscontroller:
UIViewController * vc = [[UIViewController alloc] init];
So rufen Sie einen View Controller auf (muss von einem anderen Viewcontroller 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 Identitätsinspektor Ihres Storyboards zuweisen können.quelle
Sie müssen den View Controller ü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. Sie können natürlich auch presentViewController verwenden: animiert: Vervollständigung:. Der Hauptpunkt besteht darin, dass Ihr Storyboard Ihren Zielansichts-Controller mithilfe der ID des Zielansichts-Controllers instanziiert.
quelle
Schnell
Dadurch wird ein View Controller aus dem Storyboard abgerufen und präsentiert.
let storyboard = UIStoryboard(name: "Main", bundle: nil) let secondViewController = storyboard.instantiateViewController(withIdentifier: "secondViewControllerId") as! SecondViewController self.present(secondViewController, animated: true, completion: nil)
Ändern Sie den Storyboard-Namen, den View-Controller-Namen und die View-Controller-ID entsprechend.
quelle
Sie können ViewController auf diese Weise aufrufen, wenn Sie mit NavigationController möchten
1. Im aktuellen Bildschirm: Neuen Bildschirm laden
VerifyExpViewController *addProjectViewController = [[VerifyExpViewController alloc] init]; [self.navigationController pushViewController:addProjectViewController animated:YES];
2.1 In der geladenen Ansicht: Fügen Sie unten in der .h-Datei hinzu
@interface VerifyExpViewController : UIViewController <UINavigationControllerDelegate>
2.2 In der geladenen Ansicht: Fügen Sie unten in der .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 nützlich für jemanden dort :)
quelle
Es gibt zwei Möglichkeiten, wie Sie dies tun können:
1, Erstellen Sie einen Übergang zu Ihrem ViewController in Ihrem Storyboard, wie in meiner Antwort hier erläutert: Wie führe ich einen Übergang durch, der nicht mit Benutzereingaben in iOS 5 zusammenhängt?
2, geben Sie Ihren ViewController und Ihre Kennung an und rufen Sie ihn mit dem Code in meiner Antwort hier auf: Rufen Sie die Storyboard-Szene programmgesteuert auf (ohne Segue zu benötigen)?
quelle
Hauptlogik dahinter ist_,
NSString * storyboardIdentifier = @"SecondStoryBoard"; UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardIdentifier bundle: nil]; UIViewController * UIVC = [storyboard instantiateViewControllerWithIdentifier:@"YourviewControllerIdentifer"]; [self presentViewController:UIVC animated:YES completion:nil];
quelle
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];
quelle
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];
quelle