如何在swift中的UITableViewCell中创建一个facebook注销按钮

时间:2017-01-19 20:13:11

标签: ios swift facebook uitableview facebook-graph-api

我使用Facebook API登录和退出。

在我的初始视图控制器中,我为登录设置了一个facebook按钮,它有效。

import UIKit
import FBSDKLoginKit

class SignInViewController: UIViewController, FBSDKLoginButtonDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        let facebookLoginButton = FBSDKLoginButton()
        view.addSubview(facebookLoginButton)

        facebookLoginButton.frame = CGRect(x: 16, y: 50, width: view.frame.width - 32, height: 50)
        facebookLoginButton.delegate = self
    }

    func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) {
        print("Log out!")
    }

    func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) {
        if error != nil {
            print(error)
        }

        print("Success!")

        let mainStoryboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let desController = mainStoryboard.instantiateViewController(withIdentifier: "SWRevealViewController") as! SWRevealViewController
        self.present(desController, animated: true, completion: nil)
    }

}

在此之后,我为应用菜单创建了UITableViewController 在这个菜单中,我创建了一个UITableViewCell并放了一个按钮。

import UIKit
import FBSDKLoginKit

class LogOutTableViewCell: UITableViewCell, FBSDKLoginButtonDelegate {

    @IBOutlet weak var btnLogOut: UIButton!

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

    @IBAction func btnLogOutAction(_ sender: UIButton) {
        print("clicked!")
    }

    func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) {
        print("LogOut!")
    }

}

点击此按钮,我想登录facebook。

我在LogOutTableViewCellType LogOutTableViewCell does not conform to protocol FBSDKLoginButtonDelegate

中出错了

有谁知道我如何解决这个问题?或者有人知道另一种解决方案吗?

1 个答案:

答案 0 :(得分:1)

<强>问题

错误表明你的LogOutTableViewCell不符合Protocol FBSDKLoginButtonDelegate

<强>解决方案

只需将方法loginButton(_:didCompleteWith:error:)loginButtonDidLogOut(_:)添加到LogOutTableViewCell,即可符合协议。在您的情况下,您可以将其留空,因为您在SignInViewController中进行登录。

func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) {
  // just leave it empty
}

func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) {
  print("did logout of facebook")
}

<强>更新

因为您使用自己的@IBAction,所以可能不需要FBSDKLoginButtonDelegate。只需在您的FBSDKLoginManager().logOut()中拨打@IBAction就可以了:

@IBAction func btnLogOutAction(_ sender: UIButton) {
  print("clicked!")
  FBSDKLoginManager().logOut()
}