2017年3月21日 星期二

login in + tableview in iOS


storyboard 如上圖


右上方有一個退出的 bar button item

實作的功能就是當按下後...畫面跳到login activity

 @IBAction func logoutButton(_ sender: UIBarButtonItem) {
        
        performSegue(withIdentifier: "logoutSegue", sender: self)
        

    }





實作一個 getAccount(),,  列出所有的用戶名, 存到   username 的陣列

    func getAccount(){
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        let context     = appDelegate.persistentContainer.viewContext
        let request = NSFetchRequest<NSFetchRequestResult>(entityName : "Users")
        request.returnsObjectsAsFaults = false
        do{
            let results = try context.fetch(request)
            
            if results.count > 0 {
                for result in results as! [NSManagedObject]{
                    if let user = result.value(forKey: "username") as? String{
                        
                        if user != currentuser{
                            username.append(user)
                        }
                    }
                }
            }
            
        }catch{
            print("Could not fetch results")
        }
        
        
        //print(username)
        
    }

  修改table view的函式

 override func numberOfSections(in tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return username.count
    }

    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)

        let user = username[indexPath.row]
        // Configure the cell...
        cell.textLabel?.text = user
               

        return cell
    }


回到一開始的   viewcontroller

要把目前登錄的user name 傳過來


當呼叫 prepareSuger...  會先呼叫 prepare

所以我們在這邊加入我們要的動作

把   viewcontroller 的    loginUser 傳到   Tablecontroller 的 currentUser

這裏記住要二次轉換...

先轉換成     navigtionController

在套用   navigtionController. navigtionController.topViewController  -> 轉換成   TableViewController

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "showUserTable" {
          //let usertTable = segue.destination as! TableViewController
          //  usertTable.currentuser = loginUser
            
            let navigtionController = segue.destination as! UINavigationController
            
            let userTable = navigtionController.topViewController as! TableViewController
            
            userTable.currentuser = loginUser
            
        }
        
    }










沒有留言:

張貼留言