UITableView和UITableViewDataSource

时间:2014-11-03 21:21:01

标签: ios swift uitableview view

所以,我得到的类型ViewController不符合协议UITableViewDataSource' Xcode中的错误。我已经实现了所需的功能:

  • 的cellForRowAtIndexPath
  • numberOfRowsInSection

我甚至确定我已告诉Xcode有多少部分(这不是必需的)。这是一个单视图应用程序,我确保我的引用在Storyboard中正确设置。所以我的奥特莱斯是我的观点和我的桌面视图。我的引用Outlets设置为dataSource并委托为我的Table View。

这是代码。

ViewController.swift

import UIKit

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

    var items: [String] = ["We", "Dislike", "Swift", "Very", "Much", "Right", "Now"]

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")

        tableView.delegate = self
        tableView.dataSource = self
    }

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

    func numberOfSectionsInTableView(tableView: UITableView) -> Int{
        return 1
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.items.count
    }

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

        let cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath:indexPath) as UITableViewCell
        cell.textLabel?.text = self.items[indexPath.row]

        return cell
    }

    func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
        println("You selected cell #\(indexPath.row)!")
    }

}
编辑:另外,我知道我不需要tableView.delegate和tableView.dataSource,因为我已经在故事板中分配了它们,但我想我会包含它们以确保你们都知道我知道让它们固定下来。

2 个答案:

答案 0 :(得分:2)

UITableViewDataSource协议已经改变了一点。尝试:

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

答案 1 :(得分:1)

您的tableView(tableView:cellForRowAtIndexPath)签名错误 - 应该是:

func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell {
    let cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath:indexPath) as UITableViewCell
    cell.textLabel?.text = self.items[indexPath.row]

    return cell
}

请注意,它不再返回可选值(即没有!后缀)。