webentwicklung-frage-antwort-db.com.de

iOS: Aktuelle Ansichtssteuerung programmgesteuert

Ich verwende die Methode presentViewController:animated:completion:, um zu einem anderen Ansichtscontroller zu gelangen.

Das ist mein Code:

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

Dieser Code geht an die andere UIViewController, der andere Controller ist jedoch leer. Ich habe schon immer Storyboards verwendet, aber jetzt brauche ich dies im Code.

32
Salieh

Wenn Sie ein Storyboard verwenden, sollten Sie wahrscheinlich nicht alloc und init verwenden, um einen neuen View-Controller zu erstellen. Sehen Sie sich stattdessen Ihr Storyboard an und finden Sie das segue , das Sie ausführen möchten. Es sollte einen eindeutigen Bezeichner haben (und wenn nicht, können Sie einen in der rechten Seitenleiste setzen).

Wenn Sie den Bezeichner für dieses Segment gefunden haben, senden Sie Ihrem current view controller eine -performSegueWithIdentifier:sender-Nachricht:

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

Dadurch wird das Storyboard dazu veranlasst, einen AddTaskViewController zu instantiieren und auf die Art und Weise darzustellen, die Sie für dieses Segment definiert haben.


Wenn Sie andererseits überhaupt kein Storyboard verwenden, müssen Sie Ihrem AddTaskViewController eine Art Benutzeroberfläche zuweisen. Die häufigste Methode ist, den Controller mit einer Spitze zu initialisieren: Anstatt init aufzurufen, rufen Sie -initWithNibName:bundle: auf und geben den Namen einer .xib-Datei an, die Ihre Add-Task-Benutzeroberfläche enthält:

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

(Es gibt andere (weniger verbreitete) Möglichkeiten, um eine Ansicht zu erhalten, die mit Ihrem neuen Ansichtscontroller verknüpft ist, aber dies wird Ihnen wahrscheinlich die geringsten Schwierigkeiten bereiten, wenn Sie arbeiten möchten.)

46
Tim

Wenn Sie Storyboard verwenden und Ihr viewController "hinzufügen" sich im Storyboard befindet, legen Sie in den Einstellungen einen Bezeichner für den viewcontroller "add" fest, sodass Sie Folgendes tun können:

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

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

wenn Sie keinen ViewController für "Hinzufügen" im Storyboard oder in einer Nib-Datei haben und das ganze Programm programmatisch erstellen möchten, sagt appDocs:

Wenn Sie Ihre Ansichten nicht in einem Storyboard oder einer Nib-Datei definieren können, überschreiben Sie die loadView-Methode, um eine Ansichtshierarchie manuell zu instanziieren und der Ansichtseigenschaft zuzuweisen.

31
Leg1oneR

Sie müssen die Storyboard-ID im Storyboard-Identitätsinspektor festlegen

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

dein Code :

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

dieser Code kann an den anderen Controller gesendet werden, aber Sie erhalten einen neuen viewController, nicht den Controller Ihres Storyboards. Sie können dies wie folgt tun:

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

Der beste Weg ist

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

Versuchen Sie diesen Code:

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

Versuche Folgendes:

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

So können Sie es in Swift machen:

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