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
曾经将其 datasoure
和 delegate
设置为 self
我在 View Controller 和 Table view 之间建立了连接,将其委托设置为 self。
【参考方案1】:
试试这个,只需删除函数 numberOfRowsInSection
和 cellForRowAtIndexPath
并再次添加此函数,如:
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”的主要内容,如果未能解决你的问题,请参考以下文章