Переход между контроллерами (другая ситуация)

swift
xcode
ios

#1

Значит, есть следующий код:

let VCLogin = storyboard?.instantiateViewController(withIdentifier: "idViewControllerLogin") as! ViewControllerLogin

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

Это работает только, если начальным контроллером я укажу навигатор… Объясните в чем отличие навигатора от обычного контроллера? Можно ли этот переход (вызов модальной презентации) сделать без навигатора?

P.S. в свифте недавно, очень много чего пока не понятно. Посмотрел похожие темы, но там немного иные ситуации, поэтому мне по прежнему ничего не ясно


#2

Если я правильно понял, то разница будет в анимации перехода, разные способы возврата, в случае с навигатором, появляется бонус как swipe back.


#3

ну вот мне этот swipe back не нужен, он поверх накладывается… я убрал его вроде, но не увреен, что его там точно нет xD )) Как вызвать модельное окно презент по правильному? (но нужно програмно)


#4

ну так это и есть present


#5

ну т е без вот этого навигаторного окна я не смогу сделать это? Через кнопку же получается вывести это окно, значит должен быть способ сделать это и без навигатора


#6

можно, только что проверил

ViewController.swift

@IBAction func tap(_ sender: Any) {
        let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let newViewController = storyBoard.instantiateViewController(withIdentifier: "VC2") as! VC2
        newViewController.modalPresentationStyle = .fullScreen
        present(newViewController, animated: true, completion: nil)
    }

VC2.swift

@IBAction func tap(_ sender: Any) {
        dismiss(animated: true, completion: nil)
    }

#7

Use of undeclared type ‘VC2’

Хотя я у сториборда я указал идентификатор, но не ищет его…


#8

там еще тип нужно поменять


#9

какой тип? это где?___________


#10

let newViewController = storyBoard.instantiateViewController(withIdentifier: “VC2”) as! VC2


#11

а точно… Только вот не понимаю почему типом выступает название класса…

Кстати такая же проблема, ошибок нет, но модалка не открывается…


#12

я создавал новый проект с этим кодом, все работало.
показывайте ваш.


#13
import Foundation
import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        if !isAuth()
        {
            goToLogin()
        }
    }

    func isAuth() -> Bool {

        return false
    }
    
    func goToLogin() -> Void {

        let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let VCLogin = storyBoard.instantiateViewController(withIdentifier: "idViewControllerLogin") as! ViewControllerLogin
        //VCLogin.modalPresentationStyle = .fullScreen
        present(VCLogin, animated: true, completion: nil)

    }
}


import Foundation
import UIKit

class ViewControllerLogin: UIViewController {

    @IBOutlet weak var CountryUITextField: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
    }
}

#14

Теперь проверяйте, что бы ID совпадали и названия классов.


#15

там все верно, вот что нашел

2019-11-15 20:13:28.041860+0300 MyApp[18395:1076730] Warning: Attempt to present <MyApp.ViewControllerLogin: 0x7f8e022027a0> on <MyApp.ViewController: 0x7f8e020062e0> whose view is not in the window hierarchy!

Приложение запускается, ошибок нет, только вот этот ворнинг заметил сейчас… И окно не открывает без ошибок


#16

крч я так понял это связанно с тем, что оно не успело создаться или чето такое… но хз как это решить


#17

попробуйте из viewDidAppear вызывать


#18

спасибо, разобрался)