堆栈视图中的自定义 Facebook 按钮

Custom Facebook button inside Stack View

我正在创建一个登录页面,我想在其中添加一个 Facebook 登录按钮。我有一个堆栈视图,我想要按钮所在的位置。如何将按钮插入堆栈视图并将按钮自定义为 setUpElements()?我目前有一个普通的 UIButton,我希望 facebook 按钮位于其中,设计为我希望 FBButton 的设计方式。它现在只是 FBButton 的占位符。差不多,我只是想根据 setUpElements() 的规范自定义 facebook 按钮,并将其放置在堆栈视图中(在“注册 Apple 按钮”下)。我附上了堆栈视图设计方式的屏幕截图, 感谢您的帮助!

import UIKit
import FirebaseAuth
import FBSDKLoginKit

class WelcomeViewController: UIViewController {
    @IBOutlet weak var stackView: UIStackView! 
    @IBOutlet weak var signInAppleButton: UIButton!
    @IBOutlet weak var signInFacebookButton: UIButton!
    
    let facebookLoginButton = FBLoginButton()

    override func viewDidLoad() {
        super.viewDidLoad()
        
        setUpElements()
    }

    
    func setUpElements() {
        let button = signInFacebookButton
        button?.layer.borderWidth = 2
        button?.layer.borderColor = UIColor.init(red: 93/255, green: 129/255, blue: 140/255, alpha: 1).cgColor
        button?.layer.cornerRadius = 20.0
        button?.tintColor = UIColor.black
    }
}

如果您想以编程方式向 UIStackView 添加按钮或视图,您需要使用此函数 stackView.insertArrangedSubview(button, at: 3)

编辑

您可以创建一个函数,您希望在其中实现 facebook 登录,如下所示:

@objc func facebookLoginButtonAction() {
    let loginManager = LoginManager()
    loginManager.logIn(permissions: [], from: self) { (result, error) in
        
        // Check for error
        guard error == nil else {
            // Error occurred
            print(error!.localizedDescription)
            return
        }
        
        // Check for cancel
        guard let result = result, !result.isCancelled else {
            print("User cancelled login")
            return
        }
        
        // Successfully logged in
        // do your business logic code here...
        
        // in case if you would like to load user facebook profile
        Profile.loadCurrentProfile { (profile, error) in
            // update UI ...
        }
    }
}

然后您将此功能作为目标操作添加到您的自定义按钮让我们假设您想要使用 signInFacebookbutton 您可以将以下代码放在 viewDidLoadsetUpElements() 中:

signInFacebookbutton.addTarget(self, action: #selector(facebookLoginButtonAction), for: .touchUpInside)