2014-10-20 121 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' ... – 2014-10-20 19:08:33

+0

另外:除了符合'UIViewController','UITableViewDelegate'&的'UITableViewDataSource'你也可以使這個類成爲'UITableViewController'的子類... – 2014-10-20 19:12:38

+0

以編程方式在viewDidLoad中設置數據源和委託 – 2014-10-21 08:58:25

回答

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