选择单元格时,为什么字体不会改变?

时间:2016-03-31 05:36:26

标签: ios swift uitableview

当我选择单元格时,我在数组中打印位置,并在控制台中正确打印,但是当我尝试将字体更改为粗体以指示单元格被选中时,没有任何更改。

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let cell: cellsort = table.dequeueReusableCellWithIdentifier("cell") as! cellsort
    cell.type.font = UIFont(name: "System-Bold", size: 17)
    cell.typeselected.hidden = false
    print("selected")
    print(sort[indexPath.row])
}

1 个答案:

答案 0 :(得分:3)

因为您要更改UITableViewCell的其他实例上的字体,而不是所选的实例。

您应该只在数据源方法dequeue...中使用-tableView: cellForRowAtIndexPath:。该方法用于按需配置新单元(基于您的数据模型),并将其传递给表视图以供显示。

相反,请使用UITableView的方法:cellForRowAtIndexPath:(不要混淆数据源方法!)。它为您提供屏幕上的实际单元格,如果相应的行在屏幕外,则为nil。资料来源:Apple's documentation

编辑:我通过添加一些错误检查使代码更安全。

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    let cell: CellSort = table.cellForRowAtIndexPath(indexPath) as! CellSort
    // ^ Capitalize your class names!!!

    if let cell = table.cellForRowAtIndexPath(indexPath) as? CellSort {
        // Success

        cell.type.font = UIFont(name: "System-Bold", size: 17)
        cell.typeselected.hidden = false
        print("selected")
        print(sort[indexPath.row])
    }
    else{
        // Error; Either: 
        //     A) Cell was not found at the specified index
        //        path (method returned nil), or
        //
        //     B) The returned cell (UITableViewCell) could 
        //        not be cast to your custom subclass (CellSort).
        //
        // Neither should happen, if you register your cell classes 
        // correctly and call the above method on the same index path 
        // that was selected.
    }
}