Я хотел бы перейти от одного контроллера представления к другому. Как я могу преобразовать следующий код Objective-C в Swift?
UIViewController *viewController = [[self storyboard] instantiateViewControllerWithIdentifier:@"Identifier"];
UINavigationController *navi = [[UINavigationController alloc] initWithRootViewController:viewController];
[self.navigationController pushViewController:navi animated:YES];
ios
swift
viewcontroller
uinavigationcontroller
сатистичный
источник
источник
Ответы:
Создайте быстрый файл (SecondViewController.swift) для второго контроллера представления и в соответствующей функции введите следующее:
let secondViewController = self.storyboard.instantiateViewControllerWithIdentifier("SecondViewController") as SecondViewController self.navigationController.pushViewController(secondViewController, animated: true)
Swift 2+
let mapViewControllerObj = self.storyboard?.instantiateViewControllerWithIdentifier("MapViewControllerIdentifier") as? MapViewController self.navigationController?.pushViewController(mapViewControllerObj!, animated: true)
Swift 4
let vc = UIStoryboard.init(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "IKDetailVC") as? IKDetailVC self.navigationController?.pushViewController(vc!, animated: true)
источник
import UIKit
class SwiftNavigationController: UINavigationController { init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) { super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) // Custom initialization }`` override func viewDidLoad() { super.viewDidLoad() }
unexpectedly found nil while unwrapping an Optional value
во второй строке вашего кода. Пожалуйста, помогитеПо моему опыту
navigationController
был нулевым, поэтому я изменил свой код на этот:let next = self.storyboard?.instantiateViewControllerWithIdentifier("DashboardController") as! DashboardController self.presentViewController(next, animated: true, completion: nil)
Не забудьте установить ViewController
StoryBoard Id
вStoryBoard
->identity inspector
источник
Если вы не хотите, чтобы кнопка возврата отображалась (как в моем случае, потому что я хотел представить ее после входа пользователя в систему), вот как установить корень навигационного контроллера:
let vc = self.storyboard?.instantiateViewControllerWithIdentifier("YourViewController") as! YourViewController let navigationController = UINavigationController(rootViewController: vc) self.presentViewController(navigationController, animated: true, completion: nil)
источник
SWIFT 3.01
let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "Conversation_VC") as! Conversation_VC self.navigationController?.pushViewController(secondViewController, animated: true)
источник
В быстрой версии 4.0
var viewController: UIViewController? = storyboard().instantiateViewController(withIdentifier: "Identifier") var navi = UINavigationController(rootViewController: viewController!) navigationController?.pushViewController(navi, animated: true)
источник
Swift 3
let secondviewController:UIViewController = self.storyboard?.instantiateViewController(withIdentifier: "StoryboardIdOfsecondviewController") as? SecondViewController self.navigationController?.pushViewController(secondviewController, animated: true)
источник
В Swift 4.1 и Xcode 10
Здесь AddFileViewController - второй контроллер представления.
Идентификатор раскадровки: AFVC
let next = self.storyboard?.instantiateViewController(withIdentifier: "AFVC") as! AddFileViewController self.present(next, animated: true, completion: nil) //OR //If your VC is DashboardViewController let dashboard = self.storyboard?.instantiateViewController(withIdentifier: "DBVC") as! DashboardViewController self.navigationController?.pushViewController(dashboard, animated: true)
При необходимости используйте поток.
Пример:
DispatchQueue.main.async { let next = self.storyboard?.instantiateViewController(withIdentifier: "AFVC") as! AddFileViewController self.present(next, animated: true, completion: nil) }
Если через некоторое время захочешь переехать .
EX:
//To call or execute function after some time(After 5 sec) DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) { let next = self.storyboard?.instantiateViewController(withIdentifier: "AFVC") as! AddFileViewController self.present(next, animated: true, completion: nil) }
источник
В быстром 3
let nextVC = self.storyboard?.instantiateViewController(withIdentifier: "NextViewController") as! NextViewController self.navigationController?.pushViewController(nextVC, animated: true)
источник
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) let home = storyBoard.instantiateViewController(withIdentifier: "HOMEVC") as! HOMEVC navigationController?.pushViewController(home, animated: true);
источник
let objViewController = self.storyboard?.instantiateViewController(withIdentifier: "ViewController") as! ViewController self.navigationController?.pushViewController(objViewController, animated: true)
источник
Swift 4
Вы можете переключать экран, нажимая на контроллер навигации, прежде всего, вы должны установить контроллер навигации с помощью UIViewController
let vc = self.storyboard?.instantiateViewController(withIdentifier: "YourStoryboardID") as! swiftClassName self.navigationController?.pushViewController(vc, animated: true)
источник
Swift 5
Используйте Segue для выполнения навигации от одного контроллера представления к другому контроллеру представления:
performSegue(withIdentifier: "idView", sender: self)
Это работает в Xcode 10.2.
источник
В AppDelegate можно написать вот так ...
var window: UIWindow? fileprivate let navigationCtrl = UINavigationController() func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. self.createWindow() self.showLoginVC() return true } func createWindow() { let screenSize = UIScreen.main.bounds self.window = UIWindow(frame: screenSize) self.window?.backgroundColor = UIColor.white self.window?.makeKeyAndVisible() self.window?.rootViewController = navigationCtrl } func showLoginVC() { let storyboardBundle = Bundle.main // let storyboardBundle = Bundle(for: ClassName.self) // if you are not using main application, means may be you are crating a framework or library you can use this statement instead let storyboard = UIStoryboard(name: "LoginVC", bundle: storyboardBundle) let loginVC = storyboard.instantiateViewController(withIdentifier: "LoginVC") as! LoginVC navigationCtrl.pushViewController(loginVC, animated: false) }
источник