Type 'Viewcontroller' Does Not Conform to Protocol 'Uitableviewdatasource'

Type 'ViewController' does not conform to protocol 'UITableViewDataSource'

You should implement all the required methods before the last }, but you have written them outside of the UIViewController. Also, you need to change the func for number of lines.

the suggested edit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var table: UITableView!


override func viewDidLoad() {
super.viewDidLoad()
// 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 tableView(tableView:UITableView!, numberOfRowsInSection section:Int) -> Int
{
return 20
}

func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell!
{
let cell:UITableViewCell=UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "mycell")
cell.textLabel.text="row#\(indexPath.row)"
cell.detailTextLabel.text="subtitle#\(indexPath.row)"

return cell
}
}

Type 'ViewController' does not conform to protocol

You need to implement other methods as well. Here you are missing

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

return GetAllDataTest.count
}

Type ViewController does not conform to protocol 'UITableViewDataSource

This is a common mistake, please make sure you use the correct words. In your case it should be:

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

not

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

You must use tableView instead of tableview. It is case sensitive

type viewController does not conform to protocol UITableViewDataSource

Your UITableViewDataSource @required delegates are inside retreiveMessages(). Fix the position of that second last bracket..!!

Here is your correct code :

import Foundation
import UIKit

class ViewController : UIViewController, UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate {

@IBOutlet weak var dockViewHeightConstraint: NSLayoutConstraint!
@IBOutlet weak var sendButton: UIButton!
@IBOutlet weak var messageTextField: UITextField!
@IBOutlet weak var messageTableView: UITableView!

var messagesArray:[String] = [String]()
var delegate: UITableViewDataSource? = nil

override func viewDidLoad() {
super.viewDidLoad()

// Do any additional setup after loading the view, typically from a nib.

messageTableView.delegate = self
messageTableView.dataSource = self

// Set self as the delegate for the textfield
self.messageTextField.delegate = self

//Add a tap gesture recognizer to the tableview
let tapGesture:UITapGestureRecognizer = UITapGestureRecognizer(target:self, action: "tableViewTapped")
self.messageTableView.addGestureRecognizer(tapGesture)

// Retrieve messages from Parse
self.retreiveMessages()
}

override func didReceiveMemoryWarning(){
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

@IBAction func sendButtonTapped(sender: UIButton) {

// Send button is tapped

// Call the end editing method for the text field
self.messageTextField.endEditing(true)

//Disable the send button and textfield
self.messageTextField.enabled = false
self.sendButton.enabled = false

// Create a PFObject
var newMessageObject:PFObject = PFObject(className: "Message")

// Set the Text key to the text of the messageTextField
newMessageObject["Text"] = self.messageTextField.text

// Save the PFObject
newMessageObject.saveInBackgroundWithBlock { (success:Bool, error:NSError!) -> Void in

if (success == true) {
//Message has been saved!
// TODO: Retrieve the latest messages and reload the table
NSLog("Message saved successfully.")
}
else {
// Something bad happened.
NSLog(error.description)
}

// Enable the textfield and send button
self.sendButton.enabled = true
self.messageTextField.enabled = true
self.messageTextField.text = ""

}
}

func retreiveMessages() {

// Create a new PFQuery
var query:PFQuery = PFQuery(className: "Message")

// Call findobjectsinbackground
query.findObjectsInBackgroundWithBlock { (objects:[AnyObject]!, error:NSError!) -> Void in

// clear the messageArray
self.messagesArray = [String]()

// Loop through the objects array
for messageObject in objects {

// Retrieve the Text column of each PFObject
let messageText:String? = (messageObject as PFObject)["Text"] as? String

// Assign it into our messagesArray
if messageText != nil {
self.messagesArray.append(messageText!)
}
}

// Reload the tableview
self.messageTableView.reloadData()

// Reload the tableview
}
}

func tableViewTapped() {

// Force the textfield to end editing
self.messageTextField.endEditing(true)

}

// MARK: Textfield Delegate Methods

func textFieldDidBeginEditing(textField: UITextField) {

// Perform an animation to grow the dockview
self.view.layoutIfNeeded()
UIView.animateWithDuration(0.5, animations: {

self.dockViewHeightConstraint.constant = 350
self.view.layoutIfNeeded()

} , completion: nil)

}

func textFieldDidEndEditing(textField:UITextField) {

// Perform an animation to grow the dockview
self.view.layoutIfNeeded()
UIView.animateWithDuration(0.5, animations: {

self.dockViewHeightConstraint.constant = 60
self.view.layoutIfNeeded()

}, completion: nil)

}


// MARK: TableView Delegate Methods

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

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

// Create a table cell
let cell = self.messageTableView.dequeueReusableCellWithIdentifier("MessageCell") as UITableViewCell

// Customize the cell
cell.textLabel?.text = self.messagesArray[indexPath.row]

//Return the cell
return cell
}

}

Copy from here.

And always make sure to call numberOfRowsInSection before cellForRowAtIndexPath.

ViewController' does not conform to protocol 'UITableViewDataSource' swift

The problem is that you are using lower version of swift not swift 3.0, method cellForRowAt indexPath is work with swift 3.0, so you need to use this cellForRowAtIndexPath instead of that.

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("MenuCell", forIndexPath: indexPath) as! MenuCell
if (indexPath as NSIndexPath).row < itemsArray.count {
let option = itemsArray[(indexPath as NSIndexPath).row]
cell.titleLabel?.text = option
}
return cell
}

Type 'ViewController' does not conform to protocol 'UITableViewDataSource' in swift 3.0

Implement its required method.

  1. number of rows

  2. cell for row

    extension ViewController: UITableViewDelegate, UITableViewDataSource {

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

    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    }
    }

Receiving error Type ViewController does not conform to protocol 'UITableViewDataSource... even though I have the required functions

You are not returning your cell in tableView(_:cellForRowAtIndexPath:).

Try something like this:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier("cell")!
cell.textLabel?.text = zipCodeText.text
// Make sure to include the return statement
return cell
}

In the docs you will find information about the return value:
https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewDataSource_Protocol/#//apple_ref/occ/intfm/UITableViewDataSource/tableView:cellForRowAtIndexPath:



Related Topics



Leave a reply



Submit