ViewController 不符合协议 UITableViewDataSource

Posted

技术标签:

【中文标题】ViewController 不符合协议 UITableViewDataSource【英文标题】:ViewController does not conform to protocol UITableViewDataSource 【发布时间】:2016-06-30 12:42:21 【问题描述】:

我最近遇到了一个问题。

我也会发布一些代码。尝试了网上的方法,但没有成功。此外,我已将 2 个表链接到视图控制器。

这是一些代码。

class ViewController2: UIViewController, UITableViewDataSource, UITableViewDelegate 

    @IBOutlet weak var carImageView: UIImageView!
    @IBOutlet weak var pieseDorite: UITableView!
    @IBOutlet weak var pieseDisponibile: UITableView!


    var fullNameArr : [String] = [] // i populate the string in a action button, no problem with the arrays
    var fullNameArrDorit : [String] = []

    override func viewDidLoad()
    
        super.viewDidLoad()
        carImageView.image = UIImage(named: ("simplu"))
        carImageView.contentMode = .ScaleAspectFit

        pieseDisponibile.delegate = self
        pieseDisponibile.dataSource = self
        self.view.addSubview(pieseDisponibile)

        pieseDorite.delegate = self
        pieseDorite.dataSource = self
        self.view.addSubview(pieseDorite)
    


    func tableView(pieseDisponibile: UITableView, numberOfRowsInSection section:Int) -> Int
    
              return fullNameArr.count
    

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

        let cell:UITableViewCell=UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "cell")
        cell.textLabel!.text = String(fullNameArr[indexPath.row])
        return cell
    

    func tableView2(pieseDorite: UITableView, numberOfRowsInSection section:Int) -> Int
    
        return fullNameArrDorit.count
    

    func tableView2(pieseDorite: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
    

        let cell2:UITableViewCell=UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "cell2")
        cell2.textLabel!.text = String(fullNameArrDorit[indexPath.row])
        return cell2
    


另外,尝试添加所有其他功能,问题仍然存在。我想我链接了一些不好的东西,我不知道。

【问题讨论】:

将tableview2全部替换为tableview,可以在同一个data-source和delegate方法中通过Tag来识别tableview 【参考方案1】:

请将所有tableView2 替换为tableView,每个方法只保留1 个。您需要对所有 UITableView 实例具有相同的委托方法。您可以通过将第一个参数与您的 UITableView 属性进行比较来分隔此方法中的不同实例。还要添加节数方法:

override func viewDidLoad()

    super.viewDidLoad()
    carImageView.image = UIImage(named: "simplu")
    carImageView.contentMode = .ScaleAspectFit

    pieseDisponibile.delegate = self
    pieseDisponibile.dataSource = self
    view.addSubview(pieseDisponibile)

    pieseDorite.delegate = self
    pieseDorite.dataSource = self
    view.addSubview(pieseDorite)


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

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

    if tableView == pieseDisponibile return fullNameArr.count
    return fullNameArrDorit.count


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

    if tableView == pieseDisponibile 
        let cell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "cell")
        cell.textLabel?.text = String(fullNameArr[indexPath.row])
        return cell
    
    let cell2 = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "cell2")
    cell2.textLabel?.text = String(fullNameArrDorit[indexPath.row])
    return cell2

【讨论】:

之前自己试过,但没有成功,这就是我选择 tableView 和 tableView2 功能的原因。不知道我做错了什么,但显然您的代码在我的项目上完美运行并解决了我的项目。

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

类型“ViewController”不符合协议“UITableViewDataSource”

类型 ViewController 不符合协议 SKPaymentTransactionObserver

ViewController 不符合协议 UITableViewDataSource

Swift UITableView 控制器错误:类型“ViewController”不符合协议“UITableViewDataSource”

ViewController 不符合自定义 UIButton 类

viewcontroller 是不是符合“UITableViewDataSource, Video Mode Delegate”协议?