iOS8 Swift - 表视图 - 控制器不符合协议UITableViewDataSource

时间:2015-04-04 03:14:57

标签: ios swift ios8

我在我的数据库中添加了另一个模型,我实际上是为前一个模型重新创建了这个模型的相同方法,但这次我得到了以下错误:

ContactsDetailViewController.swift:11:1: Type 'ContactsDetailViewController' does not conform to protocol 'UITableViewDataSource'

编辑:我也遇到了这些错误,但我再也看不出问题所在:

/Volumes/BigMan/Code/Swift/BackpackerSpots/UIKit.UITableViewDataSource:3:48: Protocol requires function 'tableView(_:cellForRowAtIndexPath:)' with type '(UITableView, cellForRowAtIndexPath: NSIndexPath) -> UITableViewCell'

/Volumes/BigMan/Code/Swift/BackpackerSpots/BackpackerSpots/ContactsDetailViewController.swift:14:19: Candidate is not a function

这是我的ContactsDetailViewController:

import UIKit

class ContactsDetailViewController: UIViewController, UITableViewDataSource,
    UITableViewDelegate {
    @IBOutlet var tableView:UITableView!

    var contact:Contact?


    override func viewDidLoad() {
        super.viewDidLoad()

        // customizing background of tableview
        self.tableView.backgroundColor = UIColor(red: 240.0/255.0, green: 240.0/255.0, blue: 240.0/255.0, alpha: 0.2)

        // remove extra separators
        self.tableView.tableFooterView = UIView(frame: CGRectZero)

        // change the color of the separator
        self.tableView.separatorColor = UIColor(red: 240.0/255.0, green: 240.0/255.0, blue: 240.0/255.0, alpha: 0.8)

        // self-sizing cells
        tableView.estimatedRowHeight = 36.0
        tableView.rowHeight = UITableViewAutomaticDimension

    }


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

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int)
        -> Int {
        return 4
    }

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

            let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as ContactsDetailTableViewCell
            // make cell transparent so background color can be seen
            cell.backgroundColor = UIColor.clearColor()


            switch indexPath.row {
            case 0:
                cell.fieldLabel.text = "Name"
                cell.valueLabel.text = contact?.contactName
            case 1:
                cell.fieldLabel.text = "Email"
                cell.valueLabel.text = contact?.contactEmail
                cell.mapButton.hidden = false
            default:
                cell.fieldLabel.text = ""
                cell.valueLabel.text = ""

            }

            return cell
    }

 }

这是ContactsDetailTableViewCell:

import UIKit

class ContactsDetailTableViewCell: UITableViewCell {
    @IBOutlet weak var fieldLabel:UILabel!
    @IBOutlet weak var valueLabel:UILabel!

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

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

        // Configure the view for the selected state
    }

}

我必须忽视一些相对简单的事情,但我只是没有看到它,而且我已经在这几个小时内挣扎。任何建议将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:1)

我认为你应该添加override

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


override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
}

答案 1 :(得分:1)

上述代码中的一些内容我想指出。

  1. 在cellForRowAtIndexPath方法中,您将单元格标识符用作“单元格”,确保在Storyboard中使用相同的名称,并在整个项目中使用其唯一名称。
  2. 在cellForRowAtIndexPath方法中,括号未正确标记
  3. 尝试为您的单元格编写以下行:

    let cell : ContactsDetailTableViewCell = tableView.dequeueReusableCellWithIdentifier("ContactsDetailTableViewCell", forIndexPath: indexPath) as ContactsDetailTableViewCell
    

    注意:确保您也在故事板中重命名标识符。