Ответ 1
Попробуйте следующее:
let vc = ViewController() //change this to your class name
self.presentViewController(vc, animated: true, completion: nil)
С Swift3:
self.present(vc, animated: true, completion: nil)
Я программно имею несколько контроллеров View в iOS Swift Project. У меня нет раскадровки и вы хотели бы избежать их, если это возможно. Есть ли способ переключиться на другой файл viewcontroller.swift
(мы будем называть его view2.swift
) и быть частью функции, которую вызывает кнопка?
Я пробовал следующее:
let storyboard: UIStoryboard = UIStoryboard(name: "myTabBarName", bundle: nil)
let vc: UIViewController = storyboard.instantiateViewControllerWithIdentifier("myVCID") as UIViewController
self.presentViewController(vc, animated: true, completion: nil)
Вышеописанное работает с раскадными версиями, но я хочу, чтобы вызывался другой view2.swift
. Это можно сделать?
Попробуйте следующее:
let vc = ViewController() //change this to your class name
self.presentViewController(vc, animated: true, completion: nil)
С Swift3:
self.present(vc, animated: true, completion: nil)
Для тех, кто получает пустые/черные экраны, этот код работал у меня.
let vc = self.storyboard?.instantiateViewControllerWithIdentifier("myVCId") as! MyVCName
self.presentViewController(vc, animated: true, completion: nil)
Чтобы установить "Идентификатор" на ваш VC, просто перейдите к инспектору идентификации для VC в раскадровке. Установите "Идентификатор раскадровки" на то, что вам нужно для идентификатора. Посмотрите на изображение ниже для справки.
Для справки, потому что этот вопрос является одним из первых результатов Google.
Метод presentViewController
заменяется методом present
.
Вы можете использовать его как старый:
self.present(viewControllerToPresent, animated: true, completion: nil)
Пример для открытия камеры:
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = UIImagePickerControllerSourceType.camera
imagePicker.allowsEditing = false
self.present(imagePicker, animated: true, completion: nil)
Использование Swift 2.1 +
let vc = self.storyboard?.instantiateViewControllerWithIdentifier("settingsVC") as! SettingsViewController
self.presentViewController(vc, animated: true, completion: nil)
Для меня у меня было два вида в двух отдельных навигационных контроллерах. Мне пришлось использовать комбинацию из вышеперечисленного.
var vc = self.storyboard?.instantiateViewControllerWithIdentifier("WelcomeViewController") as! WelcomeViewController
var navigationController = UINavigationController(rootViewController: vc)
self.presentViewController(navigationController, animated: true, completion: nil)
let secondVC = self.storyboard?.instantiateViewController(withIdentifier: "VC-ID" as! yourViewController
let navigationVC = UINavigationController(rootViewController: secondVC)
self.present(navigationVC, animated: true, completion: nil)
Swift 3
let vc = self.storyboard?.instantiateViewController(withIdentifier: "idMyViewControllerName") as! MyViewControllerName
self.present(vc, animated: true, completion: nil)
Просто используйте это: убедитесь, что с помощью nibName в противном случае предварительно загруженные представления xib не будут отображаться:
var vc : ViewController = ViewController(nibName: "ViewController", bundle: nil)
//изменим это на ваше имя класса
self.presentViewController(vc, animated: true, completion: nil)
Решен черный экран, добавив контроллер навигации и установив второй контроллер представления как rootVC.
let vc = ViewController()
var navigationController = UINavigationController(rootViewController: vc)
self.presentViewController(navigationController, animated: true, completion: nil
Вы можете использовать код ниже:
var vc = self.storyboard?.instantiateViewControllerWithIdentifier("YourViewController") as! YourViewController;
vc.mode_Player = 1
self.presentViewController(vc, animated: true, completion: nil)
Другая возможность заключается в том, что у вас нет XIB, включенного в ваш объект Build (что случилось со мной).
Это может произойти, если у вас есть другая цель для Dev, Test и Release Builds (которую вы все равно должны иметь).
Вы можете использовать код:
if let vc = self.storyboard?.instantiateViewController(withIdentifier: "secondViewController") as? secondViewController {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.window?.rootViewController = vc
}