我一直以編程方式完全從頭開始創建我的應用程序,未使用Storyboards。ViewController在以編程方式快速創建navigationController時出現多次
我的應用程序與Firebase集成,並使用Facebook登錄。
我的設置是相當簡單:
- 啓動應用程序 - >帶您到第一個VC叫
WelcomeViewController
。- 在
viewDidLoad
方法中檢查是否有用戶已登錄並存在。如果有,則會直接發送給第二個VC,稱爲FilmsViewController
FilmsViewController
是一個顯示影片的collectionViewController。用戶可以按下一部電影,並讓他們獲得關於該電影的更多信息。
(僅供參考,我已經與Facebook在我的應用程序登錄)
我有一個當前的問題,其中當上述步驟2中發生,它過渡到FilmsViewController
,但它它是否像2或3次。所以你看到新的VC出現2或3次,然後加載內容。如果您在導航欄中按下Back
按鈕,則會在回到WelcomeViewController
之前將您加載的2個或3個viewController返回。
我已經設置了我的意見如下。
在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頻道有一噸的_not_有用的教程使用故事板,這個鏈接專門針對firebase - https://www.youtube.com/playlist?list=PL0dzCUj1L5JEfHqwjBV0XFb9qx9cGXwkq –
@JasonM。這是鼓勵我在沒有Storyboard的情況下開始編碼的人!我完全按照他所做的那樣去做,沒有快樂,這使得這更令人沮喪。雖然謝謝! Brian的頻道太棒了,其他任何人都看到了,請檢查他! – Nick89
看起來像你的addStateDidChangeListener在開始時被調用了多次。你有沒有設置一個斷點來分析這個? Iam以及如何將WelcomeController設置爲導航控制器有點困惑。您應該使用welcomeController作爲RootViewController初始化navController。那麼,但如果它的工作:D。因此,檢查監聽器,你會看到;) –