如何将 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 = false
将fbSDKLoginButton
添加为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