自定义UITableViewCell:类型'UITableViewCell'的值没有成员'pointsNumber'

时间:2015-11-11 16:07:24

标签: ios swift uitableview

我的错误出现在下面的第一个代码中,在交换机的情况2中。

 cell.pointsNumber.text = "toto"
  

Xcode错误:'UITableViewCell'类型的值没有成员'pointsNumber'

我无法访问我的班级PerformancesViewCell来填写标签。 我的演员不起作用,我的单元格仍然是UITableViewCell而不是PerformancesViewCell

提前感谢您的帮助;)

细胞标识符:

let thirdCellIdentifier = "thirdCell"

的TableView:

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

        switch indexPath.row
        {
        case 0:
            cell = tableViewProfil.dequeueReusableCellWithIdentifier(firstCellIdentifier, forIndexPath: indexPath) as UITableViewCell
            cell.backgroundView = nil
            cell.backgroundColor = UIColor.clearColor()
            break;
        case 1:
            cell = tableViewProfil.dequeueReusableCellWithIdentifier(secondCellIdentifier, forIndexPath: indexPath) as! DivisionsViewCell
            break;
        case 2:
            cell = tableViewProfil.dequeueReusableCellWithIdentifier(thirdCellIdentifier, forIndexPath: indexPath) as! PerformancesViewCell
            cell.pointsNumber.text = "toto"
        case 3:
            cell = tableViewProfil.dequeueReusableCellWithIdentifier(fourthCellIdentifier, forIndexPath: indexPath) as! ChampionsViewCell
            break;
        case 4:
            cell = tableViewProfil.dequeueReusableCellWithIdentifier(fifthCellIdentifier, forIndexPath: indexPath) as UITableViewCell
            break;
        default:
            cell = tableViewProfil.dequeueReusableCellWithIdentifier(fifthCellIdentifier, forIndexPath: indexPath) as UITableViewCell
            break;
        }
        return cell
    }

CustomCell:

import UIKit

class PerformancesViewCell: UITableViewCell
{

    @IBOutlet weak var pointsNumber: UILabel!
    @IBOutlet weak var challengesSucceed: UILabel!
    @IBOutlet weak var bestPosition: UILabel!
    @IBOutlet weak var averagePosition: UILabel!
    @IBOutlet weak var challengeCreation: UILabel!

    override func awakeFromNib()
    {
        super.awakeFromNib()
    }
}

4 个答案:

答案 0 :(得分:9)

问题在于这一行:

var cell: UITableViewCell!

您将单元格声明为UITableViewCell的类型。因此,错误表明UITableViewCell没有名为pointsNumber的成员。

更改该行:

var pCell = tableView.dequeueReusableCellWithIdentifier(thirdCellIdentifier, forIndexPath: indexPath) as! PerformancesViewCell
pCell.pointsNumber.text = "toto"

由于您使用的是不同类型的单元格并使用开关来区分它们,因此您需要将新创建的单元格(pCell)分配回开关盒本身的单元格。

cell = pCell

答案 1 :(得分:1)

我同意@Midhun MP的回答。一般来说,你应该配置你的自定义tableviewcell类,并在每种情况下返回它们。但是如果你想在switch func之外返回一个单元格,你可以这样做:< / p>

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

    switch indexPath.row
    {
    case 0:
        cell = tableViewProfil.dequeueReusableCellWithIdentifier(firstCellIdentifier, forIndexPath: indexPath) as UITableViewCell
        cell.backgroundView = nil
        cell.backgroundColor = UIColor.clearColor()
        break;
    case 1:
        cell = tableViewProfil.dequeueReusableCellWithIdentifier(secondCellIdentifier, forIndexPath: indexPath) as! DivisionsViewCell
        break;
    case 2:
       let  performancesViewCell = tableViewProfil.dequeueReusableCellWithIdentifier(thirdCellIdentifier, forIndexPath: indexPath) as! PerformancesViewCell
        performancesViewCell.pointsNumber.text = "toto"
        cell = performancesViewCell
    case 3:
        cell = tableViewProfil.dequeueReusableCellWithIdentifier(fourthCellIdentifier, forIndexPath: indexPath) as! ChampionsViewCell
        break;
    case 4:
        cell = tableViewProfil.dequeueReusableCellWithIdentifier(fifthCellIdentifier, forIndexPath: indexPath) as UITableViewCell
        break;
    default:
        cell = tableViewProfil.dequeueReusableCellWithIdentifier(fifthCellIdentifier, forIndexPath: indexPath) as UITableViewCell
        break;
    }
    return cell
}

答案 2 :(得分:0)

我建议删除var的{​​{1}}声明,而不是使用

cell

每个案例。只需换出每个的正确类和标识符。

此外,请确保使用“属性”检查器中的原型单元格在故事板中定义每个自定义单元格类型,并且所有单元格都具有if indexPath.row==0 { let cell:MyCustomTVC=self.myTableView.dequeueReusableCellWithIdentifier("myCustomTVC") as! MyCustomTVC cell.myCustomLabel.text="asdf" return cell }

答案 3 :(得分:-1)

此问题不是由于您的代码,而是由于更改了视图控制器的类名而发生的。

Xcode还不够智能,因此,解决方案是删除崩溃的视图控制器,并删除其类并创建一个新的视图控制器并向其中添加新文件!

花了我几天时间来修复它。