2017-03-22 14 views
0

私はUITableviewとカスタムセルを持つViewControllerを持っています。私のコードは正しいですし、私は委任してデータソースもしました。私はtableViewCellにもIBoutletsを持っています。 ストーリーボードにも設定されているセルバックグラウンドの色は表示されません。uiTableviewセルがビューコントローラに表示されない

class HomeVC: UIViewController , UITableViewDataSource , UITableViewDelegate { 

@IBOutlet weak var profileImg: UIImageView! 
@IBOutlet weak var fullnameLbl: UILabel! 
@IBOutlet weak var emailLbl: UILabel! 
@IBOutlet weak var usernameLbl: UILabel! 
@IBOutlet weak var editprofileBtn: UIButton! 

var tableData = [AnyObject]() 
var username = String() 

@IBOutlet var homeSwipe: UISwipeGestureRecognizer! 
@IBOutlet weak var tableView: UITableView! 
var pflegerId = String() 

var weekday = Date().dayOfWeek() 

@IBAction func swipe(_ sender: Any) { 

} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.tableView.delegate = self 
    self.tableView.dataSource = self 


    //Swipe gesture 

    username = (user!["username"] as AnyObject).uppercased 
    let fullname = user!["fullname"] as? String 
    let email = user!["email"] as? String 
    pflegerId = (user!["id"] as? String)! 

    usernameLbl.text = username 
    fullnameLbl.text = fullname 
    emailLbl.text = email 

    loadData(username : username) 



} 

func loadData(username : String) { 


    let url = URL(string: "http:..") 


    var request = URLRequest(url: url!) 
    request.httpMethod = "POST" 
    let body = "Id=\(pflegerId)" 

    request.httpBody = body.data(using: .utf8) 

    URLSession.shared.dataTask(with: request) { data, response, error in 

     if error == nil { 

      DispatchQueue.main.async(execute: { 

       do{ 
        let json = try JSONSerialization.jsonObject(with: data!, options: []) as? NSDictionary 
        print(json) 


        guard let parseJSON = json else { 
         print("") 
         return 
        } 

        guard let posts = parseJSON["posts"] as? [AnyObject] else{ 
         print("error while parseJSON") 
         return 
        } 


        self.tableData = posts 

        DispatchQueue.main.async { 
         self.tableView.reloadData() 
        } 


       }catch { 
        //print("Caught an error: \(error)") 
        DispatchQueue.main.async(execute: { 
         let message = "" 
         appDelegate.infoView(message: message, color: colorSmoothRed) 
        }) 
       } 
      }) 


     }else { 
      //print("error: \(error)") 
      DispatchQueue.main.async(execute: { 
       let message = error!.localizedDescription 
       appDelegate.infoView(message: message, color: colorSmoothRed) 
      }) 

     } 
     }.resume() 

} 





@IBAction func logout_click(_ sender: Any) { 
    //alle Daten löschen 
    UserDefaults.standard.removeObject(forKey: "parseJSON") 
    UserDefaults.standard.synchronize() 

    //jetzt wieder zur Login Ansicht wechseln. 
    let loginvc = self.storyboard?.instantiateViewController(withIdentifier: "LoginVC") as! LoginVC 
    self.present(loginvc, animated: true, completion: nil) 


} 


//TABLEVIEW 

func numberOfSections(in tableView: UITableView) -> Int { 

    return 1 
} 

//Total number of Rows in Table 
func tableView (_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    print(tableData.count) 
    return tableData.count 


} 





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

    // Configure the cell... 
    let tableData = self.tableData[indexPath.row] 
    cell.patientNameLbl?.text = tableData["name"] as? String 
    cell.addressLbl?.text = tableData["address"] as? String 
    cell.timeLbl?.text = tableData["timing"] as? String 

    return cell 

} 





func coolSwiped(_ swipe : UISwipeGestureRecognizer) { 

    if swipe.direction == .right { 
     DispatchQueue.main.async { 
      appDelegate.swipeToTomorrow() 
      self.tableView.reloadData() 
     } 
    } 
    else if swipe.direction == .left { 
     DispatchQueue.main.async { 
      appDelegate.swipeToYesterday() 
      self.tableView.reloadData() 

     } 
    } 

} 

}

+0

'tableData'配列が空でないことを確認してください。 –

+0

これは空ではありません。それはサーバーサイドから値を取得します。私はそれを確認することができます私のコードを更新しました。 – SwiftUser

+1

私はしばらくしてプロトコルを実装しましたが、ストーリーボードでそれらを参照するのを忘れました。 –

答えて

-1

あなたがデータをフェッチした後にデータを再ロードするときは、メインスレッドでそれを行う必要があります。以下では

self.tableView.reloadData() 

DispatchQueue.main.async { 
    self.tableView.reloadData() 
} 
+1

コードを確認してください。彼はメインスレッドでそれを呼び出しています。 – ebby94

+0

バックグラウンドキューで呼び出されたことを示すコードには何もありません –

0

私はあなたが行のrowHeightのを指定するべきだと思いますので、この行を置き換えます。

ex.- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
return 60.0; 
} 

大部分があなたの問題を解決しました。解決しない場合は教えてください。

おかげ Nirav Zalavadia

+0

これはなぜ必要なのでしょうか?テーブルはストーリーボードのrowHeightセットを使用します。 –

0

私はあなたのための2つの質問があります。

  1. することができますハードコードARAYをし、それを確認?これにより、サーバーの問題が解消されます。
  2. todaysPatientsListCellはこれがStoryboardのカスタムセルに割り当てられていますか?

もし彼らが助けてくれたら教えてください。

関連する問題