正在调用CollectionView的“ DidSelect”方法,但没有推送下一个VC,该如何解决?

问题描述

我正在尝试从UICollectionView DidSelect代表处推送另一个VC,它被调用, 但奇怪的是,它没有推送initiated VC,我该如何解决

我的AppDelegate.swift看起来像这样:

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder,UIApplicationDelegate {
    var window: UIWindow?
    weak var coordinator: MainCoordinator?
    func application(_ application: UIApplication,didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        self.window = UIWindow(frame: UIScreen.main.bounds)
        coordinator = MainCoordinator(navigationController: UINavigationController())
        self.window?.rootViewController = UIStoryboard.splashViewController()
        self.window?.makeKeyAndVisible()
        return true
    }

}

和我的SplashViewController,在RootVC完成后,我在MainVC中将dispatchQueue切换为SplashViewController

class SplashViewController: UIViewController {
    
    weak var coordinator: MainCoordinator?
    
    //MARK: -viewDidLoad()
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // Do any additional setup after loading the view.
    }
    // MARK: - viewDidAppear()
    override func viewDidAppear(_ animated: Bool) {
        let animationView = AnimationView()
        let animation = Animation.named("SplashAnimation",bundle: Bundle.main)
        animationView.animation = animation
        animationView.frame = CGRect(origin: .zero,size: CGSize(width: self.view.frame.size.width,height: 200))
        animationView.center = self.view.center
        animationView.loopMode = .playOnce
        animationView.contentMode = .scaleAspectFit
        animationView.play { (finished) in
            dispatchQueue.main.asyncAfter(deadline: .Now() + 0.5,execute: {
                if let vc = self.storyboard?.instantiateViewController(identifier: "MainViewController") as? MainViewController {
                    self.view.window?.rootViewController = vc
                    self.view.window?.makeKeyAndVisible()
                }
                
            })
        }
        view.addSubview(animationView)
    }
}

在我的UICollectionView的{​​{1}}代表中,我正在这样做:

DidSelect

通常可以正常运行,但是现在它正在打印func collectionView(_ collectionView: UICollectionView,didSelectItemAt indexPath: IndexPath) { if collectionView == categoryCollectionView { let vc = self.storyboard?.instantiateViewController(identifier: "SymptomViewController") as! SymptomViewController self.navigationController?.pushViewController(vc,animated: true) } else { print("next collectionView not ready yet.. .") } } 语句,但是从不推送下一个VC。.。

解决方法

首先,您需要确保if collectionView == categoryCollectionView 确实等于true。

第二,我注意到您的MainViewController似乎没有嵌入NavigationController中,因此当您调用self.navigationController?.pushViewController(vc,animated: true)时,它可能什么也不做,因为可选链接会检测到self.navigationController是nil

,

由于我的声誉低下,因此我无法将其添加为评论,因此我以这种方式发布。

您是否尝试过在collectionView委托方法的第一行上放置一个断点,并在调试器中使用“ po”命令检查collectionView?由于您的if语句失败,因此很有可能是其他一些触发该委托方法的collectionView。您必须确保if collectionView == categoryCollectionView确实返回true。

此外,一旦应用程序在断点处暂停执行,检查调试导航器(以防万一您尚未使用)并了解导致指定断点的原因通常非常有用。 Debug Navigator Xcode