ViewController无法确认协议'UITableViewDataSource'

时间:2014-10-21 05:21:07

标签: uitableview ios7 swift xcode6

这个问题被多次询问。

http://stackoverflow.com/questions/25581780/type-viewcontroller-does-not-confirm-to-protocol-uitableviewdatasource 

我确实尝试过那里提供的解决方案,但我仍然无法摆脱这个错误。 UITableView的代码位于

之下
import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate
{
    @IBOutlet var tableView: UITableView!
    var data: [String] = ["one","two","three","four"]

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

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

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

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

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath!) ->  UITableViewCell!
    {
        var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell
        cell.textLabel?.text = self.data[indexPath.row]
        return cell
    }
    override func didReceiveMemoryWarning()
    {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

请告诉我在这里犯了什么错误。

3 个答案:

答案 0 :(得分:0)

尝试此操作只需移除numberOfRowsInSectioncellForRowAtIndexPath功能,然后再添加以下功能:

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

    return self.data.count
}

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

var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell
    cell.textLabel?.text = self.data[indexPath.row]
    return cell
}

这对我有用。

答案 1 :(得分:0)

以下代码在iOS 8.1上对我无效。在XCode 6.1.1中。此代码有效:

import UIKit

class ViewController : UIViewController,UITableViewDelegate,UITableViewDataSource {

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

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
        //currently only a testing number
        return 25
    }

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

        var cell:UITableViewCell=UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "mycell")
        cell.textLabel?.text = "row#\(indexPath.row)"
        cell.detailTextLabel?.text = "subtitle#\(indexPath.row)"
        return cell
    }


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

答案 2 :(得分:-1)

请在最后}之前确认所有tableview所需的方法。喜欢

类ViewController:UIViewController,UITableViewDataSource,UITableViewDelegate {

var data: [String] = ["one","two","three","four"]

override func viewDidLoad() {
    super.viewDidLoad()
    self.loadTableView()
    // Do any additional setup after loading the view, typically from a nib.
}

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

func loadTableView() {
var tableObj:UITableView=UITableView()
    tableObj=UITableView(frame: UIScreen.mainScreen().bounds, style: UITableViewStyle.Plain)
    tableObj.delegate=self;
    tableObj.dataSource=self;
    self.view.addSubview(tableObj)
}

// MARK: - 表视图数据源

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

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

func tableView(tableView:UITableView,titleForHeaderInSection section:Int) - >串? {     返回“部分(部分)” }

func tableView(tableView:UITableView,cellForRowAtIndexPath indexPath:NSIndexPath) - > UITableViewCell {     var cell:UITableViewCell = UITableViewCell(style:UITableViewCellStyle.Subtitle,reuseIdentifier:“mycell”)

var nameLabel:UILabel = UILabel(frame: CGRect(x: 50,y: 5,width: 200,height: 30))
nameLabel.text="Title\(indexPath.row)"
nameLabel.textColor=UIColor.brownColor()
nameLabel.font=UIFont.boldSystemFontOfSize(15)
nameLabel.textAlignment=NSTextAlignment.Left
cell.contentView.addSubview(nameLabel)

var imageView:UIImageView=UIImageView(frame: CGRect(x: 5,y: 2,width: 40,height: 40))
imageView.backgroundColor=UIColor.purpleColor()
imageView.layer.masksToBounds=true
imageView.layer.cornerRadius=imageView.frame.width/2

cell.contentView.addSubview(imageView)
return cell

}

}