0

我是 swift 的新手,我试图让我的文本标签显示在我的表格视图上,但它只是没有显示出来。以下是我的文件,它确实成功构建。

UI的树巢:--Main View Controller ----UI Tabel View ------Main View Controller Cell

我开始认为我在错误的地方重新加载表。

我提前感谢您的帮助!

当我删除 self.mainTableView.reloadData() 时,不会显示任何单元格。此时,我仍然可以单击单元格,它们确实会使用以下调试器行进行响应:

You selected Number 0 You selected Number 1 You selected Number 2

在此处输入图像描述

MainViewController.swift

import Foundation
import Locksmith
import UIKit
import Alamofire
import SwiftyJSON
import Alamofire
import JWTDecode

class MainViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    var userFeed = [UserFeedRow]()


    @IBOutlet weak var mainTableView: UITableView!

    override func viewDidLoad() {

        mainTableView.registerClass(MainViewTableViewCell.self, forCellReuseIdentifier: "mainTableViewCell")

        mainTableView.delegate = self
        mainTableView.dataSource = self
        mainTableView.separatorStyle = UITableViewCellSeparatorStyle.None

    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.userFeed.count
    }

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        println("You selected Number \(indexPath.row)")
    }

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

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) ->
        UITableViewCell {

        println("celler \(indexPath.row)")

        var cell:MainViewTableViewCell = self.mainTableView.dequeueReusableCellWithIdentifier("mainTableViewCell", forIndexPath:indexPath) as MainViewTableViewCell

        let feedRow = userFeed[indexPath.row]
        println(feedRow.title)
        cell.mainTableViewCellTitle?.text = feedRow.title

        return cell
    }

    override func viewDidAppear(animated: Bool) {

        // Alamofire GET user/user_feed
        // Display user feed in tableview inside of uiviewcontroller

        loadUserFeed()    

    }

    func loadUserFeed(){
        println("loadUserFeed")
        let api = API()
        api.getUserFeed(){
            responseObject, error in


            var json = JSON(responseObject!)

            if error == nil{

                // get feed
                var responseFeed  = json["feed"]
                //println(json)

                for (index: String, subJson: JSON) in responseFeed {
                    var aTitle = subJson["title"].stringValue                    
                    println(aTitle)

                    // save object to array here
                    var row = UserFeedRow(title: aTitle)

                    self.userFeed.append(row) // Appending userfeed
                }

                self.mainTableView.reloadData()
            }

        }

    }
}

自定义 TableView 单元格

import Foundation
import UIKit

class MainViewTableViewCell: UITableViewCell{


    @IBOutlet weak var mainTableViewCellBackgroundImage: UIImageView!

    @IBOutlet weak var mainTableViewCellTitle: UILabel!


    override func awakeFromNib() {
        super.awakeFromNib()

    }
    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

    }

}
4

1 回答 1

1

我会将我的评论转换为答案并附加解释。

基本上有两种处理 customUITableViewCell的方法:一种是通过情节提要(原型单元)创建它们,就像您所做的那样,并且(通常)将它们分配给自定义类;另一种是单独创建它们(使用自定义类,或使用自定义 NIB 文件,或使用自定义类 + NIB 文件)。

在故事板中创建单元格会在registerClass:forCellReuseIdentifier:背景中跳舞。当您在代码中调用此方法时,它会切断情节提要单元格与已建立的自定义类之间的连接,而只是从您的自定义类中创建单元格,在这种情况下,该单元格不包含视图信息,并呈现为空。

额外的建议:如果你认为你可能需要一个特定的单元格而不是你的应用程序中的一个单元格,最好使用 NIB + 类方法创建它,然后registerNIB:forCellReuseIdentifier:在你想使用它的地方调用它。有了这个,而不是在您需要的任何故事板视图中复制粘贴单元格(然后如果需要更改,则必须单独更改所有这些),您可以在整个应用程序中维护一个视图/NIB。

于 2015-03-29T17:06:11.670 回答