2016-03-05 1 views
0

J'ai un UIViewController avec une sous-vue d'en-tête et un UITableView. Mon tableView avec ses cellules personnalisées fonctionne parfaitement lorsque je l'implémente sur une classe UITableView, mais une fois que j'essaie de l'insérer dans mon UIViewController, j'obtiens le cadre de vue de table que je vois basé sur la couleur de fond différente mais il n'est pas rempli avec ma cellule personnalisée.Impossible d'ajouter UITableView à UIView swift

Ma requête d'impression dans tableview (... cellForRowAtIndexPath ..) n'imprime rien, c'est comme si la fonction n'était pas appelée.

Je ne suis pas sûr de ce que je fais mal, toute aide est très appréciée!

import UIKit 

class ProfileViewController: UIViewController , UITableViewDelegate, UITableViewDataSource { 

var tableView: UITableView! 
var header: UIView! 
var userName: UILabel! 
var userImage: UIImageView! 
var dataDict : NSDictionary! 
var cellArray: NSArray! 
var friends = [Friends]() 

init(dataDict: NSDictionary , nibName: String?, bundle: NSBundle?){ 
    super.init(nibName: nibName, bundle: bundle) 
    self.dataDict = dataDict 

} 

required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    cellArray = dataDict?.objectForKey("data") as! NSArray 

    tableView.delegate = self 
    tableView.dataSource = self 

    header = UIView(frame: CGRectZero) 
    header.backgroundColor = UIColor(red:77/255.0, green:255/255.0, blue:195/255.0, alpha:1.0) 

    userName = UILabel(frame: CGRectZero) 
    userName.textAlignment = .Left 
    userName.text = "Nachwa El khamlichi" 
    userName.textColor = UIColor.blackColor() 
    userName.frame = CGRectMake(10, 100, self.view.frame.width/2, 40) 

    userImage = UIImageView(frame: CGRectZero) 
    userImage.frame = CGRectMake(10, 30, 80, 80) 

    tableView.contentInset = UIEdgeInsets(top: 300, left: 0, bottom: 0, right: 0) 
    tableView.backgroundColor = UIColor.orangeColor() 
    tableView.separatorStyle = UITableViewCellSeparatorStyle.SingleLine 

    self.view.addSubview(header) 
    self.view.addSubview(userName) 
    self.view.addSubview(userImage) 
    self.view.addSubview(tableView) 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

    func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return 1 
    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

     return cellArray.count 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     print(cellArray.count) 
     let cell = tableView.dequeueReusableCellWithIdentifier(NSStringFromClass(Cell), forIndexPath: indexPath) as! Cell 

     let friendName = cellArray[indexPath.row]["name"] as? String 
     let avatarId = cellArray[indexPath.row]["id"] as? String 

     friends.append(Friends(name: friendName!, avatarId: avatarId!)) 

     cell.friend?.name = friendName 
     cell.friend = friends[indexPath.row] 
     return cell 
    } 

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
     return 40 
    } 
} 
+0

@ Nch-cadre juste fixé pour uitableview .write tableView.frame = CGRect (x: 0, y: 0, width: 320, height: 568) dans votre vueDidLoad Méthode Espérons que cela fonctionnera bien pour vous .. –

Répondre

2

Je pense que vous oubliez d'ajouter

tableView = UITableView(frame: UIScreen.mainScreen().bounds, style: UITableViewStyle.Plain) 
    tableView.delegate  = self 
    tableView.dataSource = self 
    tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell") 
    self.view.addSubview(self.tableView) 

en même temps que vous oubliez d'ajouter cadre

header = UIView(frame: CGRectZero) 
    header.frame = CGRectMake(10, 100, self.view.frame.width/2, 40) 
    header.backgroundColor = UIColor(red:77/255.0, green:255/255.0, blue:195/255.0, alpha:1.0) 

OPTion-2

si tout va bien vérifier une fois votre cellArray contient des données disponibles ou not`,

Option-3

après cette ligne ajouter cette

self.view.addSubview(self.tableView) 

    tableView.reloadData() 
+0

où vous avez créé la vue sur ce lieu ajouter ce code –

+0

Merci! quand j'ajoute tableView = UITableView (cadre: UIScreen.mainScreen(). bounds, style: UITableViewStyle.Plain) il se bloque mais avec tableView = UITableView(), mon tableau affiche, mais il est vide. J'utilise une cellule personnalisée de ma classe Cell.swift, je l'enregistre de cette façon, qui fonctionne dans un UITableViewController: tableView.registerClass (Cell.self, forCellReuseIdentifier: NSStringFromClass (Cell)), qui ne fonctionne plus que je Je l'ai intégré dans le UIViewController. Des pensées à ce sujet? – Nch

+0

vérifier la réponse mise à jour –