Wenn ein View-Controller nicht mit Storybaord oder Nib-Datei verknüpft ist, Der Standardinitiator der Klasse stellt eine Instanz des View-Controllers zur Verfügung.
dieses versuchen und sehen:
Objective-C
ViewController *viewController = [[ViewController alloc] init];
[self.navigationController pushViewController:viewController animated:true];
Swift
let viewController = ViewController()
navigationController?.pushViewController(viewController, animated: true)
aktualisieren
Um den String-Klassennamen in View-Controller zu konvertieren, folgen Sie der Erweiterung.
extension NSObject {
func viewControllerFromString(viewControllerName: String) -> UIViewController? {
if let appName = Bundle.main.infoDictionary?["CFBundleName"] as? String {
print("CFBundleName - \(appName)")
if let viewControllerType = NSClassFromString("\(appName).\(viewControllerName)") as? UIViewController.Type {
return viewControllerType.init()
}
}
return nil
}
}
Jetzt erhalten Sie Ihre View-Controller aus der Klasse String
if let viewController = viewControllerFromString(viewControllerName: "ViewController") as? ViewController {
navigationController?.pushViewController(viewController, animated: true)
}
Eine ähnliche Funktionalität mit String-Erweiterung:
extension String {
func getViewController() -> UIViewController? {
if let appName = Bundle.main.infoDictionary?["CFBundleName"] as? String {
print("CFBundleName - \(appName)")
if let viewControllerType = NSClassFromString("\(appName).\(self)") as? UIViewController.Type {
return viewControllerType.init()
}
}
return nil
}
}
if let viewController = "ViewController".getViewController() as? ViewController {
navigationController?.pushViewController(viewController, animated: true)
}
Haben Sie Storyboard (keine segue Verbindung) für Ihre View-Controller-Design? – Krunal
nein, es ist alles programmatisch – jackdm
"so kann ich einen VC referenzieren" Und wie initiieren Sie es? Sie müssen keine StoryboardID verwenden, Sie können 'MyVCForPush * vc = [[MyVCForPush alloc] init]'; 'MyVCForPush * vc = [[MeinVCForPush Alloc] initWithXibName: @someName]', dann '[vc setPushInfo: myPushInfo]', und präsentiere es dann. – Larme