it-swarm.com.ru

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

Я получил сообщение об ошибке при переходе от первого контроллера представления ко второму контроллеру представления. Моя кодировка похожа на эту

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)
62
Mohammad Nurdin

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

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)

Свифт 3

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

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

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

Увидеть ниже

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

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
  • Поиск коммунальных услуг в правом
  • Выберите личность инспектора
  • Искать в разделе личность "Раскадровка ID"
  • Поместите Идентификатор для вашего UIViewController

enter image description here

37
Cristian Mora

Если вы хотите перейти к Контроллеру, созданному Программно, то сделайте это:

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)
10
jaiswal Rajan

Смотри мой.

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

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

10
A.G

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

  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. Это показано ниже:

Screenshot for how to set storyboardID

9
Jayprakash Dubey

Swift3:

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

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

8
Arif Fikri Abas

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

  1. загрузить файл storyenter code сюда

    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)

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

Я даю вам свой код для перехода. В этом примере действие подключается к 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
    })
}
}
1
Haox

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

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

XCODE 9.2 И Swift 3.0

ViewController to NextViewcontroller без Segue Connection

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)
0
Sreekanth P

Если вы создаете пользовательский интерфейс без перетаскивания (без использования раскадровки) и хотите перейти на страницу по умолчанию или ViewController. Перейти на другую страницу? Выполните следующие действия: 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 есть сцена со стрелкой, выберите эту стрелку и нажмите кнопку удаления

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

0
Dilip Jangid

Swift 4.0.

 @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

0
Keshav Gera

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

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

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

    return true

}
0
Ahmad Al-Baqawi

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

  • вы переименовываете некоторые файлы вне XCode. Чтобы решить эту проблему, удалите файлы из своего проекта и повторно импортируйте файлы в свой проект.
  • проверьте и добавьте отсутствующий файл пера в Этапы сборки-> Копировать ресурсы пакета. наконец, проверьте правильность написания имени пера, это правильно, с учетом регистра.
  • проверьте свойства файлов .xib/storyboard в поле инспектор файлов , свойства "Target Membership" в поле выбора, после чего ваш файл xib/storyboard был связан с ваша цель.
  • например, неверный тип NIB. Щелкните правой кнопкой мыши файл и нажмите "Получить информацию", чтобы убедиться, что тип соответствует ожидаемому.
0
Itachi Uchiha
let signUpVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SignUp")
// self.present(signUpVC, animated: false, completion: nil)
self.navigationController?.pushViewController(signUpVC, animated: true)
0
Sai kumar Reddy