如何将 FBSDKLoginButton 默认图像添加到自定义 UIButton?

Posted

技术标签:

【中文标题】如何将 FBSDKLoginButton 默认图像添加到自定义 UIButton?【英文标题】:How to add FBSDKLoginButton default image to a custom UIButton? 【发布时间】:2015-05-17 13:08:38 【问题描述】:

我想将 Parse 与 Facebook 集成。为此,我需要在任何我想要的地方调用 PFFacebookUtils logInInBackgroundWithReadPermissions 方法。在集成它们的解析指南中,它告诉调用此方法,Parse 和 Facebook 帐户将被链接,仅此而已。当 UIButton 实例在内部被触摸并且一切正常时,我会调用它,但我想知道如何将 FBSDKLoginButton(没有链接用户的简单行为按钮,只是将他们验证到 Facebook)默认图像添加到我的自定义按钮。

【问题讨论】:

您希望仅使用 Facebook 登录您的应用程序(使用 Parse)。那么你打算如何使用 parse 登录呢? 【参考方案1】:

我发现了这个问题: 如何登录解析(通过创建 PFUser 来使用所有舒适的 Parse 东西),使用 FBSDKLoginbutton 设计和强大的功能。 希望这是你问的问题。 我的解决方案: 将您的按钮用作 FBSDKLoginButton (更改身份检查器中按钮的类), 将 FBSDKLoginButtonDelegate 添加到您的课程中

        @IBOutlet var fbLoginButton: FBSDKLoginButton!

class ViewController: UIViewController , FBSDKLoginButtonDelegate  
override func viewDidLoad() 
    super.viewDidLoad()
    self.fbLoginButton.readPermissions = ["public_profile","email", "user_friends" ]
    self.fbLoginButton.delegate = self

Xcode 会对你咆哮,因为你需要为他弄清楚它在登录和注销时应该做什么:

      //login to Facebook  
func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) 
    if let token = result.token

//login to Parse with token
        PFFacebookUtils.logInInBackgroundWithAccessToken(token, block:  (user: PFUser?, error: NSError?) -> Void in
            if error != nil 
                //process error
                print(error?.localizedDescription)
                return
            
            else
            
                //here you have your PFUser
            
)


不要忘记代表的注销说明:

        func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) 
    PFUser.logOutInBackground()

【讨论】:

【参考方案2】:

如果我理解正确,您正在考虑创建自己的 FBSDKLoginButton 版本,该版本可以与 Parse PFFacebookUtils 一起使用。

我最近有同样的需要,我使用了以下方法:

    创建一个 UIButton - customUIButton 创建一个 FBSDKLoginButton - fbSDKLoginButton 设置fbSDKLoginButton.userInteractionEnabled = falsefbSDKLoginButton 添加为customUIButton 的子视图 将您需要的操作添加到 customUIButton 以通过 Parse 自己处理登录 - FBSDKLoginButton 对用户触摸将是“透明的”,但会在收到来自 SDK 的登录/注销通知时自动更新。

这是我在 Swift 中的示例代码:

import UIKit
import FBSDKLoginKit
import Parse

class CustomFBLoginButton: UIButton

    init() 
        super.init(frame: CGRectZero)
        let fbSDKLoginButton = FBSDKLoginButton()
        fbSDKLoginButton.userInteractionEnabled = false//so it won't respond to touches
        self.addSubview(fbSDKLoginButton)
        self.frame = fbSDKLoginButton.frame//FBSDKLoginButton gets automatically the right frame - so let's adjust its superview to have exactly the same frame
    

    required init(coder aDecoder: NSCoder) 
        super.init(coder: aDecoder)
    


class ViewController: UIViewController

    override func viewDidLoad() 
        super.viewDidLoad()
        let customFBLoginButton = CustomFBLoginButton()
        customFBLoginButton.addTarget(self, action: "customButtonTapped:", forControlEvents: UIControlEvents.TouchUpInside)
        view.addSubview(customFBLoginButton)
    

    func customButtonTapped(button: CustomFBLoginButton)
    
        //handle login/logout via the Parse SDK
        if PFUser.currentUser() != nil 
            PFUser.logOutInBackgroundWithBlock( (_) -> Void in
                println("logged out")//the button will now refresh although I noticed a small delay 1/2 seconds
            )
        
        else 
            PFFacebookUtils.logInInBackgroundWithReadPermissions(nil)//set the permissions you need
        
    

【讨论】:

以上是关于如何将 FBSDKLoginButton 默认图像添加到自定义 UIButton?的主要内容,如果未能解决你的问题,请参考以下文章

Facebook iOS SDK / FBSDKLoginButton 忽略读取权限

Interface Builder 文件中的未知类 FBSDKLoginButton

更新 FacebookLogin Cocoapods 后在 FBSDKLoginButton.m 文件中构建错误

如果没有上传图像,如何将默认图像放入 multer?

如果未选择图像,如何将默认图像传递给先前的活动

NativeScript - 如何将图像保存/添加到手机的默认图库应用程序中