iOS:“MyViewController”不符合协议“UITableViewDataSource”
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/25935848/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
iOS : 'MyViewController' does not conform to protocol 'UITableViewDataSource'
提问by Kam K
I am new to
IOS
swift
development. I used to work with previousXcode 6 beta
.I have downloaded the
Xcode 6.0.1
and I can not get this to workXcode Version: 6.0.1
I am still getting "'
MyViewController
' does not confirm to protocol 'UITableViewDataSource
' " when I try to run the example.
我是
IOS
swift
开发新手。我曾经与以前的Xcode 6 beta
.我已经下载了
Xcode 6.0.1
,但我无法让它工作Xcode Version: 6.0.1
当我尝试运行该示例时,我仍然收到“'
MyViewController
'不确认协议'UITableViewDataSource
'”。
Can someone please help me? I have gone through other issues on this site and added all the required functions for "UITableViewDataSource
";
有人可以帮帮我吗?我已经解决了这个站点上的其他问题,并为“ UITableViewDataSource
”添加了所有必需的功能;
import UIKit
import Foundation
class MyViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
{
var array1:[String] = ["one","two","three","four"]
var array2:[String] = ["IOS","Android","java","c++","Swift"]
let sectionCount = 2
var myTableView:UITableView!
// init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
// var rect = CGRectMake(0, 0, 220, 320)
// myTableView = UITableView(frame: rect, style: UITableViewStyle.Grouped)
// super.init(nibName: nil, bundle: nil)
// // Custom initialization
// }
override func viewDidLoad() {
super.viewDidLoad()
var rect = CGRectMake(0, 0, 320, 600)
myTableView = UITableView(frame: rect, style: UITableViewStyle.Grouped)
myTableView!.delegate = self
myTableView!.dataSource = self
self.view.addSubview(myTableView)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
//dataSourrce
//tableview:tableview,section:
func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int{
switch section{
case 0:
return array1.count
case 1:
return array2.count
default:
return 1
}
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
//func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell!{
//---cellstart----
let identifier = "identifier"
// var cell:UITableViewCell
//cell
var cell = tableView.dequeueReusableCellWithIdentifier(identifier) as? MyCell
if cell == nil {
// cell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: identifier)
cell = MyCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: identifier)
}
//---cellend----
switch indexPath.section{
case 0:
// cell!.textLabel.text = array1[indexPath.row]
cell!.myLable!.text = array1[indexPath.row]
case 1:
// cell!.textLabel.text = array2[indexPath.row]
cell!.myLable!.text = array2[indexPath.row]
default:
println()
}
var image = UIImage(named: "images/qq.png")
// cell!.imageView.image = image
cell!.myImageView!.image = image
// cell!.detailTextLabel.text = "\(indexPath.section)\(indexPath.row)
return cell!
}
//dataSourrce
func numberOfSectionsInTableView(tableView: UITableView!) -> Int {
return sectionCount
}
func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
var title:String? = nil
switch section {
case 0:
title = "Num"
case 1:
title = "Prog"
default:
title = nil
}
return title
}
func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
println("Test\(indexPath.section) \(indexPath.row)")
}
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 60.0
}
func numberOfComponentsInPickerView(pickerView: UIPickerView!) -> Int {}
func pickerView(pickerView: UIPickerView!,numberOfRowsInComponent component: Int) -> Int{}
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController?{
}
func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController?{
}
}
***************** My Cell Class ***********************************
***************** 我的细胞课堂 ******************************** *****
import Foundation
import UIKit
class MyCell: UITableViewCell {
let indetifier:String = "indetifier"
var myLable:UILabel?
var myImageView:UIImageView?
override init(style: UITableViewCellStyle, reuseIdentifier: String!)
{
super.init(style: .Subtitle, reuseIdentifier: indetifier)
var rect = CGRectMake(10, 0, 60, 30)
self.myLable = UILabel()
self.myLable!.frame = rect
self.myLable!.textColor = UIColor.redColor()
self.contentView.addSubview(self.myLable!)
var imageRect = CGRectMake(160, 10, 40, 40)
self.myImageView = UIImageView()
self.myImageView!.frame = imageRect
self.contentView.addSubview(self.myImageView!)
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
回答by David Berry
You need to look at the whole error message. This specific message includes additional information about which methods are missing:
您需要查看整个错误消息。此特定消息包含有关缺少哪些方法的附加信息:
Type 'MyViewController' does not conform to protocol 'UITableViewDataSource'
Protocol requires function 'tableView(_:numberOfRowsInSection:)' with type '(UITableView, numberOfRowsInSection: Int) -> Int'
Candidate has non-matching type '(UITableView!, numberOfRowsInSection: Int) -> Int'
So... your numberOfRowsInSection
takes an optional UITableView
, and should take a requiredUITableView
(this is a change they made between 6 and 6.1, all UITableView
delegate and datasource methods now take required tableView
and indexPath
values)
所以......你numberOfRowsInSection
需要一个 optional UITableView
,并且应该需要一个requiredUITableView
(这是他们在 6 和 6.1 之间所做的更改,所有UITableView
委托和数据源方法现在都采用 requiredtableView
和indexPath
values)
回答by Rajesh Loganathan
Try this simple solution:
试试这个简单的解决方案:
import UIKit
class HomeViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
{
//MARK: - Life Cycle
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
//MARK: - Tableview Delegate & Datasource
func tableView(tableView:UITableView, numberOfRowsInSection section:Int) -> Int
{
return 10
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int
{
return 1
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "MyTestCell")
return cell
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
{
}
}
回答by GuruMurthy
class ROTableView: UITableView, UITableViewDelegate {
func tableView(tableView:UITableView!, numberOfRowsInSection section:Int) -> Int {
return 10
}
func tableView(tableView:UITableView!, cellForRowAtIndexPath indexPath:NSIndexPath!) -> UITableViewCell! {
let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "MyTestCell")
// cell.text = "Row #\(indexPath.row)"
// cell.detailTextLabel.text = "Subtitle #\(indexPath.row)"
return cell
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
}
}
When you create the subclass for UITableView
please refer the above code, you will not get any error.
创建子类时UITableView
请参考上面的代码,不会出现任何错误。
回答by Lal Krishna
In my case, i named my UITableView
as tableView
. That caused this same error:
就我而言,我将我的命名UITableView
为tableView
. 这导致了同样的错误:
'MyViewController' does not conform to protocol 'UITableViewDataSource'
'MyViewController' 不符合协议 'UITableViewDataSource'
including another error:
包括另一个错误:
Candidate is not a function
候选人不是函数
And changed tableview
name to something else, error is gone.
并将tableview
名称更改为其他名称,错误消失了。