如何在Swift中自定义Firebase身份验证UI
我正在使用Firebase预构建的UI构建一个身份验证系统,我希望自定义UI以适合该程序。假设我想将背景颜色设置为黑色,并更改按钮的角半径,有什么方法可以做到这一点吗?我尝试过对authPickerViewController进行子分类,但不知何故,它没有起作用。我做了一些搜索,但也找不到任何教程或最近与此相关的问题 以下是我的MainViewController中的内容如何在Swift中自定义Firebase身份验证UI,swift,firebase-authentication,firebaseui,Swift,Firebase Authentication,Firebaseui,我正在使用Firebase预构建的UI构建一个身份验证系统,我希望自定义UI以适合该程序。假设我想将背景颜色设置为黑色,并更改按钮的角半径,有什么方法可以做到这一点吗?我尝试过对authPickerViewController进行子分类,但不知何故,它没有起作用。我做了一些搜索,但也找不到任何教程或最近与此相关的问题 以下是我的MainViewController中的内容 类LoginViewController:UIViewController,FUIAuthDelegate{ 重写func
类LoginViewController:UIViewController,FUIAuthDelegate{
重写func viewDidLoad(){
super.viewDidLoad()
让authUI=FUIAuth.defaultAuthUI()
authUI?.delegate=self
let提供程序:[FUIAuthProvider]=[
FUIEmailAuth(),
FUIGoogleAuth(),
FUIPhoneAuth(authUI:FUIAuth.defaultAuthUI()!)]
authUI?.providers=提供程序
让authViewController=authUI?.authViewController()
authViewController!.modalPresentationStyle=.fullScreen
authViewController!.setNavigationBarHidden(真,动画:假)
self.present(authViewController!,动画:false,完成:nil)
}
func应用程序(uApp:ui应用程序,打开url:url,
选项:[UIApplicationOpenUrlOptions:Any])->Bool{
让sourceApplication=options[UIApplicationOpenURLOptionsKey.sourceApplication]
如果FUIAuth.defaultAuthUI()?.handleOpen(url,sourceApplication:sourceApplication as?String)?false{
返回真值
}
返回错误
}
}
下面是我创建的子类:
类FUICustomAuthPickerViewController:FUIAuthPickerViewController,FUIAuthDelegate{
重写func viewDidLoad(){
super.viewDidLoad()
self.view.backgroundColor=.black
}
func authPickerViewController(用于authUI authUI:FUIAuth)->FUIAUTHICKERVIEWCONTROLLER{
返回FUICustomAuthPickerViewController(nibName:“FUICustomAuthPickerViewController”,
bundle:bundle.main,
authUI:authUI)
}
}
另一方面,他们说:
通过将FirebaseUI的视图控制器子类化并在FUIAuth的委托方法中指定它们,可以自定义登录屏幕
我是初学者,我怎么能做到呢
编辑:
因此,按照上的说明,我通过创建FUIAuthDelegate
的扩展,成功地将内容添加到预构建的UI中
扩展登录查看控制器:FUIAuthDelegate{
func应用程序(uApp:ui应用程序,打开url:url,
选项:[UIApplicationOpenUrlOptions:Any])->Bool{
让sourceApplication=options[UIApplicationOpenURLOptionsKey.sourceApplication]
如果FUIAuth.defaultAuthUI()?.handleOpen(url,sourceApplication:sourceApplication as?String)?false{
返回真值
}
返回错误
}
func authPickerViewController(用于authUI authUI:FUIAuth)->FUIAUTHICKERVIEWCONTROLLER{
设vc=FUIAuthPickerViewController(authUI:authUI)
let view=ui视图(帧:.0)
view.backgroundColor=.black
view.translatesAutoresizingMaskIntoConstraints=false
vc.view.addSubview(视图)
NSLayoutConstraint.activate([
view.heightAnchor.constraint(等式:vc.view.heightAnchor,乘数:1),
view.widthAnchor.constraint(等式:vc.view.widthAnchor,乘数:1)])
返回vc
}
}
事实证明,子类不一定是必需的。然而,我似乎无法将我创建的这个视图作为背景,它要么覆盖所有内容,要么什么都不覆盖。我尝试直接更改视图的背景颜色,但没有成功。有人知道怎么做吗?使用本文提供的方法和注释之一解决了问题。事实证明,除了子类化之外,您还必须向子类添加以下两种方法才能使其正常工作
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?, authUI: FUIAuth?) {
super.init(nibName: nil, bundle: Bundle.main, authUI: authUI!)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
但是,我使用的方法(不确定其他方法是否会引发相同的问题)也导致了另一个问题-电子邮件登录按钮停止响应-这通过向视图控制器显示navigationViewController
来解决,因为电子邮件登录按钮与导航栏一起工作,使用navigationViewController
呈现视图后,可以将其删除
现在,完整的子类如下所示:
import UIKit
import FirebaseUI
class FUICustomAuthPickerViewController: FUIAuthPickerViewController {
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?, authUI: FUIAuth?) {
super.init(nibName: nil, bundle: Bundle.main, authUI: authUI!)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
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.backgroundColor = .eatstrOrange
view.insertSubview(imageViewBackground, at: 0)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.setNavigationBarHidden(true, animated: animated)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationController?.setNavigationBarHidden(false, animated: animated)
}
}
这是主视图控制器:
import UIKit
import FirebaseUI
class LoginViewController: UIViewController{
override func viewDidLoad() {
super.viewDidLoad()
let authUI = FUIAuth.defaultAuthUI()
let delegate = authUI?.delegate
authUI?.delegate = delegate
let providers: [FUIAuthProvider] = [
FUIGoogleAuth(),
FUIEmailAuth(),
FUIPhoneAuth(authUI:FUIAuth.defaultAuthUI()!)]
authUI?.providers = providers
let authViewController = FUICustomAuthPickerViewController(authUI: authUI!)
authViewController.modalPresentationStyle = .fullScreen
navigationController?.pushViewController(authViewController, animated: false)
}
}
请阅读-总结是,这不是一种向志愿者讲话的理想方式,可能会对获得答案产生反作用。请不要将此添加到您的问题中。@halfer是的,先生!非常感谢。@TimmyMi-查看FirebaseUI iOS repo以获得显示如何自定义不同视图控制器的完整示例:。另外,我想知道你是否真的想使用
黑色
作为背景色,或者更确切地说是支持亮模式/暗模式-你能评论一下吗?@PeterFriese我在这里用黑色作为例子,所以不用担心。不管怎样,谢谢你的回购协议,我会查一查再给你回复。@PeterFriese你介意再详细解释一下吗?我如何在我的项目中实现这一点?谢谢!