it-swarm.com.de

Wie kann ich Storyboard programmgesteuert aus dem Unterricht laden?

Mein Problem ist, dass ich nach einer Möglichkeit gesucht habe, sowohl Storyboard als auch xib zu verwenden. Ich kann das Storyboard jedoch nicht programmgesteuert laden und anzeigen. Das Projekt wurde mit der Entwicklung mit xib begonnen, und jetzt ist es sehr schwierig, alle xib-Dateien im Storyboard zu verschachteln. Also habe ich nach einer Möglichkeit gesucht, dies im Code zu tun, wie mit alloc, init, Push für viewController. In meinem Fall habe ich nur einen Controller im Storyboard: UITableViewController, der statische Zellen mit einigen Inhalten enthält, die ich anzeigen möchte. Wenn jemand weiß, wie man mit xib und Storyboard ohne große Umgestaltung richtig arbeitet, bin ich für jede Hilfe dankbar.

170
kokoko

Wechseln Sie in Ihrem Storyboard zum Attribut-Inspektor und legen Sie die Kennung des Ansichts-Controllers fest. Sie können diesen Ansichtscontroller dann mit dem folgenden Code präsentieren.

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"myViewController"];
vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:vc animated:YES completion:NULL];
353
James Beith

Schnell 3

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "viewController")
self.navigationController!.pushViewController(vc, animated: true)

Swift 2

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("viewController")
self.navigationController!.pushViewController(vc, animated: true)

Voraussetzung

Weisen Sie Ihrem View Controller eine Storyboard ID zu.

Storyboard ID

IB> Identitätsinspektor anzeigen> Identität> Storyboard-ID

Swift (Legacy)

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("viewController") as? UIViewController
self.navigationController!.pushViewController(vc!, animated: true)

Edit: Swift 2 vorgeschlagen in einem Kommentar von Fred A.

wenn du ohne navigationController arbeiten willst, musst du folgendes benutzen:

    let Storyboard  = UIStoryboard(name: "Main", bundle: nil)
    let vc = Storyboard.instantiateViewController(withIdentifier: "viewController")
    present(vc , animated: true , completion: nil)
64
SwiftArchitect

Geben Sie im Attributinspektor den Bezeichner für diesen Ansichtscontroller ein, und der folgende Code funktioniert für mich

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
DetailViewController *detailViewController = [storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];
[self.navigationController pushViewController:detailViewController animated:YES];
16
chaithraVeeresh

Versuche dies

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"Login"];

[[UIApplication sharedApplication].keyWindow setRootViewController:vc];

in Swift
NavigationController und pushController können Sie ersetzen für

present(vc, animated:true , completion: nil)
2
Tarik

Für Swift 3 und 4 können Sie dies tun. Als bewährte Methode wird der Name des Storyboards auf StoryboardID festgelegt.

enum StoryBoardName{
   case second = "SecondViewController"
}
extension UIStoryBoard{
   class func load(_ storyboard: StoryBoardName) -> UIViewController{
      return UIStoryboard(name: storyboard.rawValue, bundle: nil).instantiateViewController(withIdentifier: storyboard.rawValue)
   }
}

und dann können Sie Ihr Storyboard wie folgt in Ihren ViewController laden:

class MyViewController: UIViewController{
     override func viewDidLoad() {
        super.viewDidLoad()
        guard let vc = UIStoryboard.load(.second) as? SecondViewController else {return}
        self.present(vc, animated: true, completion: nil)
     }

}

Wenn Sie ein neues Storyboard erstellen, setzen Sie einfach den gleichen Namen in die Storyboard-ID und fügen Sie den Namen des Storyboards in Ihre Aufzählung "StoryBoardName" ein.

1
gandhi Mena

Sie können jederzeit direkt zum Root-Controller springen:

UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *vc = [storyboard instantiateInitialViewController];
vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:vc animated:YES completion:NULL];
0
user938797