如何解决正在调用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。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。