Swift:表视图超类错误

时间:2016-04-07 13:47:36

标签: ios swift uitableview superclass

我使用Swift创建了一个滑出菜单。我以前做了很多次,但是当我今天创建它时,我得到了这个错误(见截图)。这可能只是我犯的一个简单错误。

以下是我认为导致问题的代码:

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

    var cell:UITableViewCell? = tableView.dequeueReusableCellWithIdentifier("Cell")! as UITableViewCell

    if cell == nil{
        cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "Cell")

        cell!.backgroundColor = UIColor.clearColor()
        cell!.textLabel!.textColor = UIColor.darkTextColor()

        let selectedView:UIView = UIView(frame: CGRect(x: 0, y: 0, width: cell!.frame.size.width, height: cell!.frame.size.height))
        selectedView.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.3)

        cell!.selectedBackgroundView = selectedView
    }

    cell!.textLabel!.text = tableData[indexPath.row]

    return cell
}

截图:

enter image description here

更新:我尝试删除override

enter image description here

希望有人可以提供帮助!

4 个答案:

答案 0 :(得分:2)

该方法不会覆盖超类的任何方法,因为签名是错误的。

正确的签名是

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

所有参数都是非可选类型。

并使用推荐的方法

let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier,
                                           forIndexPath: indexPath)

也始终返回非可选类型

答案 1 :(得分:0)

确保您的班级实施UITableViewDelegateUITableViewDataSource

class MyController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    // All your methods here
}

除非任何其他超类已经实现了这些方法,否则您不会需要override个关键字。

答案 2 :(得分:0)

看到这对我有用

  • 只需确认UITableViewDelegateUITableViewDataSource
  • 即可
  • 实施所需方法
import UIKit

class ListViewController: UIViewController, UITableViewDelegate, UITableViewDataSource  {

    let containArray = ["One","two","three","four","five"]


    // MARK: - View Lifecycle
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    //MARK: Table view data source and delegate methods

    //Number of rows
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return containArray.count
    }

    //Prepare Custom Cell
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{

        let identifier = "simpleTextCell"
        var cell: SimpleTextCell! = tableView.dequeueReusableCellWithIdentifier(identifier) as? SimpleTextCell

        if cell == nil {
            tableView.registerNib(UINib(nibName: "SimpleTextCell", bundle: nil), forCellReuseIdentifier: identifier)
            cell = tableView.dequeueReusableCellWithIdentifier(identifier) as? SimpleTextCell
        }

        let dayName = containArray[indexPath.row]
        cell.lblProductName.text = dayName


        return cell
    }

    //Handle click
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        self.performSegueWithIdentifier("productListSegue", sender: self)
    }
}

答案 3 :(得分:0)

尝试删除"!",此功能的声明是:

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

并确保已将tableview的委托和数据源设置为" self"