【发布时间】:2016-09-23 21:17:03
【问题描述】:
我一直以编程方式完全从头开始创建我的应用程序,不使用 Storyboards。
我的应用与 Firebase 集成,并使用 Facebook 登录。
我的设置相当简单:
- 启动应用程序 -> 将您带到第一个名为
WelcomeViewController的 VC。- 在
viewDidLoad方法中进行检查以查看用户是否已登录并存在。如果有,它会将您直接发送到名为FilmsViewController的第二个 VCFilmsViewController是一个显示电影的 collectionViewController。用户可以按下电影,它会将他们带到有关该电影的更多信息。
(作为参考,我已经在我的应用中使用 Facebook 登录)
我有一个当前问题,当上面的第 2 步发生时,它会转换到 FilmsViewController,但它会执行 2 或 3 次。因此,您会看到新的 VC 出现 2 或 3 次,然后加载内容。如果您按下导航栏中的 Back 按钮,它会带您返回它加载的 2 或 3 个视图控制器,然后再带您回到 WelcomeViewController。
我的观点如下。
在AppDelegate.swift:
var window: UIWindow?
var navController: UINavigationController?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
navController = UINavigationController()
let firstViewController: WelcomeViewController = WelcomeViewController()
self.navController!.pushViewController(firstViewController, animated: true)
window = UIWindow(frame: UIScreen.main.bounds)
window?.rootViewController = navController
window?.makeKeyAndVisible()
return true
}
在WelcomeViewController 中viewDidLoad:
FIRAuth.auth()?.addStateDidChangeListener { auth, user in
if let user = user {
// User is signed in.
// Direct the user to the home screen
let toFilmListVC = FilmsViewController(collectionViewLayout: UICollectionViewFlowLayout())
self.navigationController?.pushViewController(toFilmListVC, animated: true)
} else { ...
}
}
我已经寻找解决方案的负载 - 没有。我只找到了一篇关于这个问题的帖子,有人说解决方案是更改该控制器的类名,我已经这样做了,它没有改变任何东西。
谁能帮我解决这个问题,好吗?谢谢。
【问题讨论】:
-
这可能无法直接回答您的问题,但这个 YouTube 频道有大量关于不使用故事板的有用教程,此链接也专门用于 firebase - youtube.com/playlist?list=PL0dzCUj1L5JEfHqwjBV0XFb9qx9cGXwkq
-
@JasonM。这是鼓励我在没有故事板的情况下开始编码的人!我完全按照他的做法,没有喜悦,这就是让这更令人沮丧的原因。不过谢谢! Brian 的频道很棒,其他人看到这个,看看他!
-
看起来您的 addStateDidChangeListener 在开始时被调用了不止一次。你有没有设置断点来分析这个?我也有点困惑如何将 WelcomeController 设置为 Nav Controller。您应该使用 WelcomeController 作为 RootViewController 来初始化 navController。好吧,但如果它有效:D。所以检查监听器,你会看到;)
-
你可以做的是,在推送之前检查监听器,如果你当前的控制器在视图中可见,如果我没有错,你可以使用 self.view.isVisible 或类似的。嗯,并尝试使用弱化的自我 :)
标签: ios swift uinavigationcontroller uicollectionview