2014-10-20 3 views
1

Я написал это в Xcode 6 (Swift), но он говорит: «Тип« FirstViewController »не соответствует протоколу« UITableViewDataSource »и не позволяет мне создавать программу. Пожалуйста помоги?FirstViewController не соответствует протоколу

import UIKit 

class FirstViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

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. 
} 

//UIViewTableDataSource 
func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int{ 
    return taskMGR.tasks.count 
} 


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



     let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: 
      "test") 

     cell.textLabel?.text = taskMGR.tasks[indexPath.row].name 
     cell.detailTextLabel?.text = taskMGR.tasks[indexPath.row].desc 

     return cell 
} 

} 
+0

Вам не хватает 'override' перед этими двумя методами DataSource ... –

+0

также: Вместо того, чтобы в соответствии с' 'UIViewController', UITableViewDelegate' & 'UITableViewDataSource', вы можете также сделать класс подклассом' UITableViewController' ... –

+0

установить источник данных и делегировать его программно в viewDidLoad –

ответ

0

Я переписал ваш класс для работы. Я удалил пару переменных Мне это не нужно, но вы можете добавить их обратно. Ключ должен был удалить «UITableViewDataSource» (вы не соответствуете этому) и развернуть дополнительную ячейку так, как вы ее написали. Я предпочитаю не строить ячейку таким образом, но это еще одно обсуждение. Если у вас все еще есть проблемы, дайте мне знать.

import UIKit 

class FirstViewController: UIViewController, UITableViewDelegate { 

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. 
} 

//UIViewTableDataSource 
func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int{ 
    return 1 
} 


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

     let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: 
      "test")! 

     return cell 
     } 

} 
0

Как я уже писал в комментариях вы можете также изменить класс к UITableViewController подкласса, как это в основном так же, как UIViewController + UITableViewDelegate + UITableViewDataSourceнебольшой немного дополнительной функциональности включены, если вы хотите Это). Он также имеет свойство UITableView, включенное «из коробки».

Затем вы в конечном итоге с помощью следующего класса:

class FirstViewController: UITableViewController { 

    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. 
    } 

    //UIViewTableDataSource 
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{ 
     return taskMGR.tasks.count 
    } 


    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{ 
      let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier:"test") 
      cell.textLabel?.text = taskMGR.tasks[indexPath.row].name // You can remove ? when updating to XCode 6.1/Swift 1.1 
      cell.detailTextLabel?.text = taskMGR.tasks[indexPath.row].desc 
      return cell 
    } 
} 
Смежные вопросы