Подтвердить что ты не робот

Swift presentViewController

Я программно имею несколько контроллеров 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. Это можно сделать?

4b9b3361

Ответ 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)

Ответ 2

Для тех, кто получает пустые/черные экраны, этот код работал у меня.

let vc = self.storyboard?.instantiateViewControllerWithIdentifier("myVCId") as! MyVCName
self.presentViewController(vc, animated: true, completion: nil)

Чтобы установить "Идентификатор" на ваш VC, просто перейдите к инспектору идентификации для VC в раскадровке. Установите "Идентификатор раскадровки" на то, что вам нужно для идентификатора. Посмотрите на изображение ниже для справки.

Ответ 3

Для справки, потому что этот вопрос является одним из первых результатов Google.

Нарушение изменения в Swift 3:

Метод 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)

Ответ 4

Использование Swift 2.1 +

 let vc = self.storyboard?.instantiateViewControllerWithIdentifier("settingsVC") as! SettingsViewController
 self.presentViewController(vc, animated: true, completion: nil)

введите описание изображения здесь

Ответ 5

Для меня у меня было два вида в двух отдельных навигационных контроллерах. Мне пришлось использовать комбинацию из вышеперечисленного.

var vc = self.storyboard?.instantiateViewControllerWithIdentifier("WelcomeViewController") as! WelcomeViewController
    var navigationController = UINavigationController(rootViewController: vc)
    self.presentViewController(navigationController, animated: true, completion: nil)

Swift 3.x

        let secondVC = self.storyboard?.instantiateViewController(withIdentifier: "VC-ID" as! yourViewController
        let navigationVC = UINavigationController(rootViewController: secondVC)
        self.present(navigationVC, animated: true, completion: nil)

Ответ 6

Swift 3

let vc = self.storyboard?.instantiateViewController(withIdentifier: "idMyViewControllerName") as! MyViewControllerName
self.present(vc, animated: true, completion: nil)

Ответ 7

Просто используйте это: убедитесь, что с помощью nibName в противном случае предварительно загруженные представления xib не будут отображаться:

var vc : ViewController = ViewController(nibName: "ViewController", bundle: nil)//изменим это на ваше имя класса

 self.presentViewController(vc, animated: true, completion: nil)

Ответ 8

Решен черный экран, добавив контроллер навигации и установив второй контроллер представления как rootVC.

let vc = ViewController()       
var navigationController = UINavigationController(rootViewController: vc)
self.presentViewController(navigationController, animated: true, completion: nil

Ответ 9

Вы можете использовать код ниже:

var vc = self.storyboard?.instantiateViewControllerWithIdentifier("YourViewController") as! YourViewController;
            vc.mode_Player = 1
            self.presentViewController(vc, animated: true, completion: nil)

Ответ 10

Другая возможность заключается в том, что у вас нет XIB, включенного в ваш объект Build (что случилось со мной).

Это может произойти, если у вас есть другая цель для Dev, Test и Release Builds (которую вы все равно должны иметь).

Ответ 11

Вы можете использовать код:

if let vc = self.storyboard?.instantiateViewController(withIdentifier: "secondViewController") as? secondViewController {
   let appDelegate = UIApplication.shared.delegate as! AppDelegate
   appDelegate.window?.rootViewController = vc
}