【问题标题】:Navigation Controller is not loading ( push , present ) another viewController导航控制器未加载(推送、呈现)另一个视图控制器
【发布时间】:2020-09-25 10:29:59
【问题描述】:

我无法在单击按钮时加载 viewController,因为我知道定义的 Vc 包含我要呈现的 VC 的值。

//AppDelegate
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    
    let mainViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(identifier: "ViewController") as! ViewController
    let navVC = UINavigationController.init(rootViewController: mainViewController)
    self.window?.rootViewController = navVC
    self.window?.makeKeyAndVisible()
    return true
}

 //ViewController Class
 class ViewController: UIViewController, UIScrollViewDelegate {

@IBOutlet weak var collectionView: UICollectionView!
@IBOutlet weak var button: UIButton!
@IBOutlet weak var pageController: UIPageControl!

private let reuseIdentifier = /*"CollectionViewCell"*/ "Cell"
let collectionViewImages : [UIImage] = [#imageLiteral(resourceName: "cooov"), #imageLiteral(resourceName: "shutterstock535739452"), #imageLiteral(resourceName: "portraitYoungManLyingBedCheckingHisFeverThermometer232147948490")]
let collectionViewTexts : [String] = [
    "Stay at home ! your health is our Priority",
    "Access Latest Coronavirus articles !",
    "Check up on your health on a daily basis !"
]

override func viewDidLoad() {
    super.viewDidLoad()
    renderButton()
    renderCell()
    pageController.numberOfPages = collectionViewImages.count
    pageController.currentPage = 0
}

@IBAction func buttonClicked(_ sender: UIButton) {
    let signupVC = UIStoryboard.init(name:"SignUp", bundle: nil).instantiateViewController(withIdentifier: "SignUp")
    as! SignUp
self.navigationController?.pushViewController(signupVC, animated: true)
}
 }


//SignUp class The VC that should appear on ButtonClick 
class SignUp : BaseViewController {
override func viewDidLoad() {
    super.viewDidLoad()
 }
}
 
 //the class that is inherited by ViewController
 class BaseViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationController?.navigationBar.isHidden = true
 }
 }
[enter image description here][1]}

enter image description here

这里是提供的图片的链接,请检查。 https://drive.google.com/drive/folders/1CxysH911PIa3-S9Dx6EUV7DE8vlnEd4l?usp=sharing

【问题讨论】:

  • 如果您尝试推送 viewController,则不需要 buttonClicked 内的第二行,您将在其中实例化新的 UINavigationController。
  • 试过了还是不行
  • 哪个类有按钮?
  • 您在 appDelegate 中有 buttonClicked 代码?
  • 你的buttonClicked代码正在执行吗?

标签: ios swift xcode uiviewcontroller uinavigationcontroller


【解决方案1】:

你不需要新的 UINavigation 控制器来推送。

@IBAction func buttonClicked(_ sender: UIButton) {
    let signupVC = UIStoryboard.init(name:"SignUp", bundle: nil).instantiateViewController(withIdentifier: "SignUp")
        as! SignUp
    self.navigationController?.pushViewController(signupVC, animated: true)
}

此外,如果您使用 iOS 13.0+ 并使用 Xcode 11+,您的 SceneDelegate 将被调用而不是 AppDelegate。因此,请尝试将粘贴复制到 SceneDelegate。

【讨论】:

  • 在函数内部执行 print(self.navigationController) 看看是nil还是有值
  • 它为零,即使在 Appdelegate 中我也不知道如何解决这个问题,我启动了一个导航控制器,对吧?
  • 您的操作按钮是否在 ViewController 或其他控制器中被点击?
  • @ubdhateja 它在 ViewController 中我已经在我的驱动器上共享了一些图像,因为我是新来的,我无法附加图片。 drive.google.com/drive/folders/…
  • 能否请您添加更多代码。分离 ViewControllers 和 AppDelegate 中的代码。
【解决方案2】:

这是你可以这样改变它的功能,让我知道结果

先运行这个

@IBAction func buttonClicked(_ sender: UIButton) {
        let signupVC = UIStoryboard.init(name:"SignUp", bundle: nil).instantiateViewController(withIdentifier: "SignUp")

        let navVC = UINavigationController.init(rootViewController: signupVC)
      //  self.present(navVC, animated: true, completion: nil)

        if let nav =  self.navigationController {
            nav.pushViewController(navVC, animated: true)
        } else {
            print("navigation controller not found")
        }
    }

然后尝试呈现......并让我知道发生了什么

@IBAction func buttonClicked(_ sender: UIButton) {
        let signupVC = UIStoryboard.init(name:"SignUp", bundle: nil).instantiateViewController(withIdentifier: "SignUp")

        let navVC = UINavigationController.init(rootViewController: signupVC)
        self.present(navVC, animated: true, completion: nil)


    }

【讨论】:

  • 第一个代码打印 nav con not found ,而第二个代码以目前的方式运行良好,但旧的 nav 仍然出现在顶部,这就是我认为我应该使用 push 而不是出席的原因。那么我的错误是什么,所以没有找到 NV
  • 如果您使用signupVC 而不是navVC,您将看不到导航栏
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-03
  • 2018-02-16
相关资源
最近更新 更多