好像沒什麼前言可說XD
就是把logout功能做出來~~
如此一來我們就可以測試登入/註冊功能是否能成功跳轉到相對應的頁面,同時也開始開發profile view controller的部分。
首先引入相關的libraries。
import UIKit
import FirebaseAuth
接著,因為我們希望profile view能顯示一些設定、登出之類的功能,因此同樣選用table view。
接著我們將這個sign out
元件放入table view中,並將指派對象指定為自己。
class ProfileViewController: UIViewController {
@IBOutlet var tableView: UITableView!
let data = ["Sign Out"]
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
tableView.delegate = self
tableView.dataSource = self
}
}
刻意練習,先前都提過UIViewController
沒有實作指派的功能,因此我們將額外繼承其他的class,並實作出以下3個必要的方法。
extension ProfileViewController: UITableViewDelegate, UITableViewDataSource {
//numberofrow
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return data.count
}
//cellforrow
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = data[indexPath.row]
cell.textLabel?.textAlignment = .center
cell.textLabel?.textColor = .red
return cell
}
接著第三個,是點選該行之後的行為。
我們預期使用者點選sign out
之後,firebase auth應該要能夠收到已登出的訊息,一來使得該使用者無法在app內有行為、二來該使用者可以再次登入。
因此我們使用addAction
,並在handler加入方法,通知firebase auth進行登出。
最後將畫面跳轉離開。
//selectrow
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
let actionSheet = UIAlertController(title: "Sure to sign out",
message: "",
preferredStyle: .actionSheet)
actionSheet.addAction(UIAlertAction(title: "Sign out",
style: .destructive,
handler: { [weak self] _ in
guard let strongSelf = self else{
return
}
do {
try FirebaseAuth.Auth.auth().signOut()
let vc = LoginViewController()
let nav = UINavigationController(rootViewController: vc)
nav.modalPresentationStyle = .fullScreen // if not-> pop up as a card
strongSelf.present(nav, animated: true)
}
catch {
print("Fail to log out")
}
}))
actionSheet.addAction(UIAlertAction(title: "Cancel",
style: .cancel,
handler: nil))
present(actionSheet, animated: true)
}
}
若上述內容有誤或可以改進的部分,歡迎留言以及提出任何指教~
謝謝 (´・∀・`)