web-dev-qa-db-fra.com

Swift - UITableView dans UIViewController, les fonctions UITableView ne sont pas appelées

J'ai inséré une vue de table dans un UIViewController. Mais mon code ne fonctionne pas. Lorsque j'ai vérifié, j'ai constaté qu'aucune des fonctions de table ne sont appelées.

    class CustomViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

        @IBOutlet weak var authorArticlesTableView: UITableView!

        var authorid: Int!
        var authorname: String!
        var articles: [JSON]? = []

        func loadArticles(){
            let url = "http:here.com/" + String(authorid) + "/"
            println(url)
            Alamofire.request(.GET, url).responseJSON { (Request, response, json, error) -> Void in
                if (json != nil){
                    var jsonObj = JSON(json!)
                    if let data = jsonObj["articles"].arrayValue as [JSON]?{
                        self.articles = data
                        self.authorArticlesTableView.reloadData()
                    }
                }
            }
        }
        override func viewDidLoad() {
            super.viewDidLoad()
            self.loadArticles()
            println("viewDidLoad")
        }

         func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
             println("numberOfRowsInSection")
            return self.articles?.count ?? 0
        }

         func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
            var cell = tableView.dequeueReusableCellWithIdentifier("CustomCell") as! CustomTableViewCell
            cell.articles = self.articles?[indexPath.row]
            println("cellForRowAtIndexPath")
            return cell
        }


         func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
            performSegueWithIdentifier("WebSegue", sender: indexPath) 
            tableView.deselectRowAtIndexPath(indexPath, animated: true)
        }

Une solution pour ça?

Merci,

23
serdar aylanc

Vous devez définir votre contrôleur de vue en tant que délégué/source de données de table:

ajouter à la fin du viewDidLoad:

authorArticlesTableView.delegate = self
authorArticlesTableView.dataSource = self
51
Greg

Définissez la table delegate et dataSource:

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.delegate = self
    tableView.dataSource = self
}
15
Ashish Kakkad

Parfois, si vous oubliez de draper et de déposer UITableViewCell sur UITableView. XCode ne comprend pas que TableView a une cellule. Par défaut, lorsque vous drapez et déposez UITableView dans UIViewController. Je vois que UITableView a une cellule. Mais vous devez également draper et déposer UITableViewCell dans UITableView.

C'est du travail avec moi.

0
OriDev