Ios CollectionView`DidSelect`方法正在被调用,但没有推动下一个VC,如何修复它?
我正试图从Ios CollectionView`DidSelect`方法正在被调用,但没有推动下一个VC,如何修复它?,ios,swift,uicollectionview,Ios,Swift,Uicollectionview,我正试图从UICollectionViewDidSelect委托推送另一个VC,正在调用它, 但奇怪的是,它并没有推动启动的VC,我该如何修复它 我的AppDelegate.swift如下所示: import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? weak var coordinator: MainCoordin
UICollectionView
DidSelect
委托推送另一个VC,正在调用它,
但奇怪的是,它并没有推动启动的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
,在SplashViewController
完成后,我将RootVC
切换到DispatchQueue
中的MainVC
:
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
的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.. .")
}
}
它通常按预期运行,但现在它正在打印print
语句,但从未推送下一个VC 首先,如果collectionView==categoryCollectionView
真的等于true,您需要确保
其次,我注意到您的MainViewController
似乎没有嵌入到NavigationController
中,因此当您调用self.NavigationController?.pushViewController(vc,动画:true)
时,由于可选链接将检测到self.navigationController为nil
由于我的声誉低下,我无法将其添加为注释,因此我以这种方式发布
您是否尝试过在collectionView委托方法的第一行上放置断点,并在调试器中使用“po”命令检查collectionView?由于if语句失败,很可能是其他collectionView触发了此委托方法。如果collectionView==categoryCollectionView
确实返回true,则必须确保
此外,一旦应用程序在断点上停止执行,检查调试导航器(如果您还没有)并了解导致指定断点的原因通常非常有用。
如果collectionView==categoryCollectionView
。。。这是真的吗?