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

Программный переход на другой контроллер/сцену просмотра

У меня появилось сообщение об ошибке при навигации с контроллера первого взгляда на контроллер второго представления. Мое кодирование похоже на это

let vc = LoginViewController(nibName: "LoginViewController", bundle: nil)
self.navigationController?.pushViewController(vc, animated: true)

Проблема в том, что я всегда получал такое сообщение об ошибке

2014-12-09 16:51:08.219 XXXXX[1351:60b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </var/mobile/Applications/FDC7AA0A-4F61-47E7-955B-EE559ECC06A2/XXXXX.app> (loaded)' with name 'LoginViewController''
*** First throw call stack:
(0x2efcaf0b 0x39761ce7 0x2efcae4d 0x31b693f9 0x31ac1eaf 0x3191e365 0x317fe895 0x318a930d 0x318a9223 0x318a8801 0x318a8529 0x318a8299 0x318a8231 0x317fa305 0x3147631b 0x31471b3f 0x314719d1 0x314713e5 0x314711f7 0x3146af1d 0x2ef96039 0x2ef939c7 0x2ef93d13 0x2eefe769 0x2eefe54b 0x33e6b6d3 0x3185d891 0x4ccc8 0x4cd04 0x39c5fab7)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)
4b9b3361

Ответ 1

Я уже нашел ответ

Swift 4

let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewController(withIdentifier: "nextView") as! NextViewController
self.present(nextViewController, animated:true, completion:nil)

Swift 3

let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)

let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("nextView") as NextViewController
self.presentViewController(nextViewController, animated:true, completion:nil)

Ответ 2

Попробуйте это. Здесь "LoginViewController" - это идентификатор раскадровки, указанный в раскадровке.

См. ниже

let secondViewController = self.storyboard?.instantiateViewControllerWithIdentifier("LoginViewController") as LoginViewController
self.navigationController?.pushViewController(secondViewController, animated: true)

Ответ 3

XCODE 8.2 И SWIFT 3.0

Представьте существование UIViewController

let loginVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "LoginViewController") as! LoginViewController
self.present(loginVC, animated: true, completion: nil)

Нажмите существующий UIViewController

let loginVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "LoginViewController") as! LoginViewController
self.navigationController?.pushViewController(loginVC, animated: true)

Помните, что вы можете поместить идентификатор UIViewController в следующие шаги:

  • Выберите Main.storyboard
  • Выберите UIViewController
  • Поиск в утилитах справа
  • Выберите инспектор идентификации
  • Поиск в разделе "Идентификатор раскадровки"
  • Поместите идентификатор для UIViewController

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

Ответ 4

Если вы хотите перейти к Controller, созданному Programmatically, сделайте следующее:

let newViewController = NewViewController()
self.navigationController?.pushViewController(newViewController, animated: true)

Если вы хотите перейти к контроллеру на StoryBoard с идентификатором "newViewController", сделайте следующее:

let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let newViewController = storyBoard.instantiateViewController(withIdentifier: "newViewController") as! NewViewController
        self.present(newViewController, animated: true, completion: nil)

Ответ 5

См. мой.

func actioncall () {
    let loginPageView = self.storyboard?.instantiateViewControllerWithIdentifier("LoginPageID") as! ViewController
    self.navigationController?.pushViewController(loginPageView, animated: true)
}

Если вы используете стиль представления, вы можете потерять навигационную панель страницы с заданной pushnavigation.

Ответ 6

Swift3:

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

Попробуйте это. Вы просто смутили nib с представлением раскадровки.

Ответ 7

Вы можете перейти от одной сцены к другой программно, используя нижеприведенный код:

  let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)

  let objSomeViewController = storyBoard.instantiateViewControllerWithIdentifier("storyboardID") as! SomeViewController

  // If you want to push to new ViewController then use this
  self.navigationController?.pushViewController(objSomeViewController, animated: true)

  // ---- OR ----

  // If you want to present the new ViewController then use this
  self.presentViewController(objSomeViewController, animated:true, completion:nil) 

Здесь storyBoardID - это значение, которое вы установили в сцене с помощью Interface Builder. Это показано ниже:

Снимок экрана, как установить storyboardID

Ответ 8

Программно существуют разные способы, основанные на разных ситуациях

  1. загрузить исходный код storyboard сюда

    let yourVc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "YourViewController") as! YourViewController self.present(yourVc, animated: true, completion: nil)

  2. Загрузить из xib

    let yourVc = YourViewController.init(nibName: "YourViewController", bundle: nil) self.present(yourVc, animated: true, completion: nil)

  3. Навигация по Segue

    self.performSegue(withIdentifier: "your UIView", sender: self)

Ответ 9

let VC1 = self.storyboard!.instantiateViewController(withIdentifier: "MyCustomViewController") as! ViewController
let navController = UINavigationController(rootViewController: VC1)
self.present(navController, animated:true, completion: nil)

Ответ 10

Я даю вам мой код для перехода. В этом примере действие подключается к UIButton. Поэтому не забудьте установить его. Не забудьте указать имя вашего ViewController в методе transition.

Не забудьте также установить раскладку. Вам нужно иметь один вид на viewController. Подключите каждый ViewController к каждому виду в storyBoard. Вы можете видеть на скриншоте ниже

enter image description hereenter image description here

class PresentationViewController: UIViewController {
    override func viewDidLoad() {
         super.viewDidLoad()

         var playButton   = UIButton.buttonWithType(UIButtonType.System) as UIButton

         let image = UIImage(named: "YourPlayButton") as UIImage?

         playButton.frame = CGRectMake(0, 0, 100, 100)
         playButton.center = CGPointMake(self.view.frame.width/2, self.view.frame.height/2)
         playButton.addTarget(self, action: "transition:", forControlEvents:  UIControlEvents.TouchUpInside)
         playButton.setBackgroundImage(image, forState: UIControlState.Normal)

         self.view.addSubview(playButton)
    }


func transition(sender:UIButton!)
{
    println("transition")
    let secondViewController = self.storyboard?.instantiateViewControllerWithIdentifier("YourSecondViewController") as UIViewController

    let window = UIApplication.sharedApplication().windows[0] as UIWindow
    UIView.transitionFromView(
        window.rootViewController!.view,
        toView: secondViewController.view,
        duration: 0.65,
        options: .TransitionCrossDissolve,
        completion: {
            finished in window.rootViewController = secondViewController
    })
}
}

Ответ 11

Вы можете осуществлять навигацию между контроллерами представлений с помощью кода с помощью раскадровки и раскадровки. Этот код предназначен для Swift 3:

let signUpVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SignUp")
self.navigationController?.pushViewController(signUpVC, animated: true)

Ответ 12

Я не уверен, что вы пытаетесь сделать шаги ниже, я думаю, что ошибка может возникнуть ниже причин.

  • вы переименовываете некоторые файлы вне XCode. Чтобы решить проблему, удалите файлы из вашего проекта и повторно импортируйте файлы в свой проект.
  • проверьте и добавьте отсутствующий файл Nib в Фазы сборки- > Скопируйте ресурсы пакета. Наконец проверьте орфографию имени nib, это правильно, учитывайте регистр.
  • проверьте свойства файлов .xib/раскадровки в инспекторе файлов, в поле выбора " Целевое членство" выберите поле, затем ваш файл xib/storyboard был связан с вашей целью.
  • например, неправильный тип NIB.Right щелкните по файлу и нажмите "Получить информацию", чтобы убедиться, что тип - это то, что вы ожидаете.

Ответ 13

Если вы создаете пользовательский интерфейс без перетаскивания (без использования раскадровки) и хотите перейти на страницу по умолчанию или ViewController.swift на другую страницу? Следуй этим шагам 1) добавить класс (.swift) 2) Импорт UIKit 3) Объявить имя класса, например

class DemoNavigationClass :UIViewController{
     override func viewDidLoad(){
         let lbl_Hello = UILabel(frame: CGRect(x:self.view.frame.width/3, y:self.view.frame.height/2, 200, 30));
lbl_Hello.text = "You are on Next Page"
lbl_Hello.textColor = UIColor.white
self.view.addSubview(lbl_Hello)
    }
}

после создания второй страницы вернуться на первую страницу (ViewController.swift) Здесь сделайте кнопку в методе viewDidLoad

let button = UIButton()
button.frame = (frame: CGRect(x: self.view.frame.width/3, y: self.view.frame.height/1.5,   width: 200, height: 50))
 button.backgroundColor = UIColor.red
 button.setTitle("Go to Next ", for: .normal)
 button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
 self.view.addSubview(button)

теперь определите метод buttonAction вне viewDidLoad() в том же классе

func buttonAction(sender: UIButton!) 
{
    let obj : DemoNavigationClass = DemoNavigationClass();
    self.navigationController?.pushViewController(obj, animated: true)
}

Держите одно, что я забываю в main.storyboard есть сцена со стрелкой, выберите эту стрелку и нажмите кнопку удаления

теперь перетащите навигационный контроллер и удалите табличное представление, которое поставляется с контроллером navaigation. выберите команду управления навигационным контроллером на клавиатуре и перетащите ее в другую сцену на раскадровке, которая является ViewController. Это означает, что ваш viewcontroller становится корневым контроллером надеюсь, это поможет вам благодаря в main.storyboard, drag-and-drop navigationcontroller,

Ответ 14

let signUpVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SignUp")
// self.present(signUpVC, animated: false, completion: nil)
self.navigationController?.pushViewController(signUpVC, animated: true)

Ответ 15

В дополнение к хорошим ответам выше, чтобы установить контроллер навигационного представления поверх экрана на вашем приложении, вы можете добавить его в свой файл AppDelegate.swift внутри блока следующим образом

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    window = UIWindow()
    window?.makeKeyAndVisible()
    window?.rootViewController = UINavigationController(rootViewController: LoginViewController())

    return true

}

Ответ 16

XCODE 9.2 и SWIFT 3.0

ViewController - NextViewcontroller без переходного соединения

let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewController(withIdentifier: "NextViewController") as! NextViewController
self.navigationController?.pushViewController(nextViewController, animated:true)

или

let VC:NextViewController = storyboard?.instantiateViewController(withIdentifier: "NextViewController") as! NextViewController
self.navigationController?.pushViewController(VC, animated: true)

Ответ 17

Swift 4.0.3

 @IBAction func registerNewUserButtonTapped(_ sender: Any) {

        print("---------------------------registerNewUserButtonTapped --------------------------- ");

        let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)

        let nextViewController = storyBoard.instantiateViewController(withIdentifier: "RegisterNewUserViewController") as! RegisterNewUserViewController
        self.present(nextViewController, animated:true, completion:nil)

    }

Измените имя нашего контроллера. RegisterNewUserViewController

Ответ 18

Я думаю, что вы ищете что-то вроде этого:

let signUpViewController = SignUpViewController()
present(signUpViewController, animated: true, completion: nil)

Если вы хотите полноэкранный режим новой страницы:

present(signUpViewController, animated: true, completion: nil)

Надеюсь, это поможет :)