ViewController 未确认协议“UITableViewDataSource”

Posted

技术标签:

【中文标题】ViewController 未确认协议“UITableViewDataSource”【英文标题】:ViewController does not confirm to protocol 'UITableViewDataSource' 【发布时间】:2014-10-21 05:21:07 【问题描述】:

这个问题被问了多次。

http://***.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.
    

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

【问题讨论】:

它看起来不像 tableView 曾经将其 datasouredelegate 设置为 self 我在 View Controller 和 Table view 之间建立了连接,将其委托设置为 self。 【参考方案1】:

试试这个,只需删除函数 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

这对我有用。

【讨论】:

【参考方案2】:

以下代码在 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.
    

【讨论】:

【参考方案3】:

请在最后一个之前确认所有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 返回数据.count

func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? 返回“节(节)”

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

【讨论】:

以上是关于ViewController 未确认协议“UITableViewDataSource”的主要内容,如果未能解决你的问题,请参考以下文章

关于视图的 Swift 未确认协议“UITableViewDataSource”

与vp服务器协议失败

在辅助viewcontroller上显示来自网站的pdf

TCP协议相关

可靠数据传输 滑动窗口协议和选择重传协议

类型“ViewController”不符合协议