UITableView单元格未在Swift中更新

时间:2015-07-23 18:06:46

标签: ios swift uitableview

我正在尝试在UIViewController内的UITableView中设置单元格的文本,并且文本没有被更新。此外,即使我有两个打印语句,也没有打印任何内容,因此似乎没有调用这些函数。这是我的代码:

class HomePageViewController: UIViewController, UITextFieldDelegate, UITableViewDelegate {
@IBOutlet weak var flaggedTable: UITableView!
@IBOutlet weak var recentTable: UITableView!

var flaggedSerials = [DataCell]()
var recentlyViewedSerials = [DataCell]()

override func viewDidLoad() {
    super.viewDidLoad()

    addSerial("FCGPR0TUG07P", status: "Shipped", issues: 6, reworks: 2, index: 0, flagged: false)    
}    

func addSerial(serial: String, status: String, issues: Int, reworks: Int, index: Int, flagged: Bool)
{
    var currentSerial = DataCell()

    currentSerial.serial = serial
    currentSerial.status = status
    currentSerial.issues = "\(issues) Reported Issues"
    currentSerial.reworks = "\(reworks) Reported Reworks"
    currentSerial.index = index

    if flagged == true {
        flaggedSerials.append(currentSerial)
    }
    else {
        recentlyViewedSerials.append(currentSerial)
    }
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        println(recentlyViewedSerials.count) // This line does not get printed
        return recentlyViewedSerials.count
    }

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("FlaggedCell", forIndexPath: indexPath) as! UITableViewCell
    addSerial("FCGPR0TUG07P", status: "Shipped", issues: 6, reworks: 2, index: 0, flagged: false)
    println(recentlyViewedSerials[indexPath.row].serial) // This line does not get printed
    cell.textLabel?.text = recentlyViewedSerials[indexPath.row].serial

    return cell
    }
}

3 个答案:

答案 0 :(得分:5)

用这一行替换类定义行:

ggplot(mtcars, aes(factor(carb))) + geom_bar(width = 1.1, aes(x = factor(carb), fill = ifelse(mtcars$carb %in% c(1,3,6), "blue", "transparent"))) + guides(fill = FALSE) + geom_bar(width = 0.7) + scale_fill_manual(values = c("transparent", "blue")) + coord_flip()

另请记住将tableView的public void main() { List<String> l = new ArrayList<String>(); l.add("apple"); l.add("balala"); A a = new A(); a.member = l; for (String s : a.member) system.println(s); } } class HomePageViewController: UIViewController, UITextFieldDelegate, UITableViewDelegate, UITableViewDataSource {属性设置为self。

您可以使用界面构建器或使用viewDidLoad方法中的代码执行此操作:

delegate

答案 1 :(得分:1)

由于您在UITableView内使用此UIViewController,因此请务必记住设置TableView dataSourcedelegate UIViewController

编辑:对不起,刚看到@c_rath提到了同样的事情。

答案 2 :(得分:1)

如果根本没有调用func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int,似乎您忘记分配tableView.dataSource = self或在界面构建器中执行此操作。由于您的控制器中似乎有2个表视图,因此您需要将它们的两个数据源都设置为自己,例如:

flaggedTable.dataSource = self
recentTable.dataSource = self

别忘了调整UITableViewDataSource如:

class HomePageViewController: UIViewController, UITextFieldDelegate, UITableViewDelegate, UITableViewDataSource {

所以完整的代码看起来像:

class HomePageViewController: UIViewController, UITextFieldDelegate, UITableViewDelegate, UITableViewDataSource {

...

override func viewDidLoad() {
    super.viewDidLoad()

    flaggedTable.dataSource = self
    recentTable.dataSource = self
    flaggedTable.delegate = self
    recentTable.delegate = self

    addSerial("FCGPR0TUG07P", status: "Shipped", issues: 6, reworks: 2, index: 0, flagged: false)    
}