FirebaseAuthUI IOS – как добавить фоновое изображение экрана входа в систему?

Я хочу добавить изображение за кнопками входа в систему на экране входа в систему. В настоящее время я получаю следующее сообщение об ошибке:

Завершение работы приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «Не удалось загрузить NIB в комплекте: «NSBundle ‹...> с именем...

Вот мой код:

В AppDelegate:

class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    var authHandle: AuthStateDidChangeListenerHandle?
    var userInfo:User!

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        FirebaseApp.configure()

        //checkLoggedIn
        authHandle = Auth.auth().addStateDidChangeListener { auth, user in
            if let user = user {
                self.userInfo = user
            } else {
                // No user is signed in.
                self.login()
            }
        }

        return true
    }

func login() {
        let authUI = FUIAuth.defaultAuthUI()
        authUI?.delegate = self as? FUIAuthDelegate

        let providers: [FUIAuthProvider] = [
            FUIFacebookAuth()
        ]
        authUI?.providers = providers

        // Present the auth view controller and then implement the sign in callback.
        let authViewController = CustomAuthViewController(authUI: authUI!)
        self.window?.rootViewController?.present(authViewController, animated: false, completion: nil)
    }

    func authPickerViewController(for authUI: FUIAuth) -> FUIAuthPickerViewController {
        return CustomAuthViewController(nibName: "CustomAuthViewController",
                                        bundle: Bundle.main,
                                        authUI: authUI)
    }
}

В CustomAuthViewController:

class CustomAuthViewController: FUIAuthPickerViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.

        let width = UIScreen.main.bounds.size.width
        let height = UIScreen.main.bounds.size.height

        let imageViewBackground = UIImageView(frame: CGRect(x: 0, y: 0, width: width, height: height))
        imageViewBackground.image = UIImage(named: "myimage")

        // you can change the content mode:
        imageViewBackground.contentMode = UIViewContentMode.scaleToFill

        view.insertSubview(imageViewBackground, at: 0)
    }

Вы видите, что не так? Я не уверен, что функция authPickerViewController должна быть в моем AppDelegate, можете ли вы подтвердить, что это нормально?

Я нашел этот пост и этот, но я не могу заставить его работать. Я использую Firebase-UI 4.1.1, мой процесс входа в систему работает без фонового изображения (поэтому без CustomPickerViewController).

Спасибо,

Алекс


person Alex9494    schedule 06.09.2017    source источник
comment
взгляните на этот ответ   -  person chirag90    schedule 06.09.2017
comment
или даже этот ответ   -  person chirag90    schedule 06.09.2017
comment
Спасибо за эти ссылки! Но я не уверен, что знаю, как решить мою проблему, потому что она связана с FirebaseAuthUi. Поэтому у меня нет контроллера в моей раскадровке для входа в систему, он обрабатывается, загружается Firebase. Если я заменю let authViewController = CustomAuthViewController(authUI: authUI!) на let authViewController = authUI!.authViewController() в AppDelegate, процесс входа в систему будет работать, но у меня нет фонового изображения. Очистка проекта не работает.   -  person Alex9494    schedule 06.09.2017
comment
Можете ли вы подтвердить, что rootViewController window не является nil?   -  person proxpero    schedule 29.09.2017


Ответы (1)


Вот как выглядит мое индивидуальное переопределение:

import UIKit
import FirebaseAuthUI

class BizzyAuthViewController: FUIAuthPickerViewController {


    override init(nibName: String?, bundle: Bundle?, authUI: FUIAuth) {
        super.init(nibName: "FUIAuthPickerViewController", bundle: bundle, authUI: authUI)
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.

        let width = UIScreen.main.bounds.size.width
        let height = UIScreen.main.bounds.size.height

        let imageViewBackground = UIImageView(frame: CGRect(x: 0, y: 0, width: width, height: height))
        imageViewBackground.image = UIImage(named: "lavenderWithBees")

        // you can change the content mode:
        imageViewBackground.contentMode = UIViewContentMode.scaleAspectFill

        view.insertSubview(imageViewBackground, at: 0)

    }

}

И вот как выглядит моя функция входа (внутри «ViewController.swift»):

func login() {

    //FirebaseApp.configure()
    let authUI = FUIAuth.defaultAuthUI()
    let providers: [FUIAuthProvider] = [FUIGoogleAuth(), FUIFacebookAuth()]
    authUI?.providers = providers
    authUI?.delegate = self as FUIAuthDelegate

    let authViewController = BizzyAuthViewController(authUI: authUI!)
    let navc = UINavigationController(rootViewController: authViewController)
    self.present(navc, animated: true, completion: nil)

}
person Brad Caldwell    schedule 15.11.2017