ViewController does not confirm to protocol 'U

2019-08-29 18:15发布

问题:

This question was asked multiple times.

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

and I did tried the solutions provided over there but still I am not able to get away with this error. Code to UITableView is below

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.
    }
}

Please tell what mistake am I doing here.

回答1:

Try this just remove both the function numberOfRowsInSection and cellForRowAtIndexPath and again add this function like :

 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
}

This is works for me.



回答2:

The following code didn't work for me on iOS 8.1. in XCode 6.1.1. This code works:

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.
    }
}


回答3:

Please confirm all tableview required methods before the last }. Like

class 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: - Table view data source

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

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

func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { return "Section (section)" }

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

}

}