2016-04-07 43 views
1

我已經使用Swift創建了一個滑出菜單。我以前做過這麼多次,但是當我今天創建它時,出現此錯誤(請參閱屏幕截圖)。這可能只是我犯的一個簡單的錯誤。Swift:表視圖超類錯誤

下面是代碼,我認爲是造成問題:

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

    var cell:UITableViewCell? = tableView.dequeueReusableCellWithIdentifier("Cell")! as UITableViewCell 

    if cell == nil{ 
     cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "Cell") 

     cell!.backgroundColor = UIColor.clearColor() 
     cell!.textLabel!.textColor = UIColor.darkTextColor() 

     let selectedView:UIView = UIView(frame: CGRect(x: 0, y: 0, width: cell!.frame.size.width, height: cell!.frame.size.height)) 
     selectedView.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.3) 

     cell!.selectedBackgroundView = selectedView 
    } 

    cell!.textLabel!.text = tableData[indexPath.row] 

    return cell 
} 

截圖:

enter image description here

更新:我已經嘗試刪除override

enter image description here

希望有人能幫助!

+0

@RDC謝謝,但沒有奏效。查看更新 – Jordan

+0

您是否實際**實現了「UITableView」委託所需的協議**? 'class YourViewController:UIViewController,UITableViewDataSource,UITableViewDelegate {/ * ... * /}' –

+0

@AlejandroIván是啊 – Jordan

回答

2

不會覆蓋超類的任何方法,因爲簽名是錯誤的方法。

正確的簽名是

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

所有的參數都是非可選類型。

而且還使用推薦的方法

let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, 
              forIndexPath: indexPath) 

也總是返回您的建議非可選類型

+0

感謝您的幫助!答案的第一部分已經解決了問題(簽名部分),但讓單元格,我得到「未解析的標識符」單元標識符「任何想法? – Jordan

+0

而不是'cellIdentifier'使用你的文字''Cell''並刪除'nil'檢查和所有不必要的感嘆號。 – vadian

+0

非常感謝你!你的回答已經解決了我的問題!謝謝你的幫助! – Jordan

0

確保您的班級實施了UITableViewDelegateUITableViewDataSource

class MyController: UIViewController, UITableViewDelegate, UITableViewDataSource { 
    // All your methods here 
} 

您不需要override關鍵字,除非任何其他超已經實現了這些方法。

+0

非常感謝!部分答案已經解決了我的問題,但是當我刪除'override'時,我得到了使用未解析的標識符「單元標識符」。有任何想法嗎? – Jordan

0

看到這個工作對我來說

  • 只是確認UITableViewDelegateUITableViewDataSource
  • 實現所需的方法

import UIKit 

class ListViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

    let containArray = ["One","two","three","four","five"] 


    // MARK: - View Lifecycle 
    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 
    override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(animated) 
    } 

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

    //MARK: Table view data source and delegate methods 

    //Number of rows 
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return containArray.count 
    } 

    //Prepare Custom Cell 
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{ 

     let identifier = "simpleTextCell" 
     var cell: SimpleTextCell! = tableView.dequeueReusableCellWithIdentifier(identifier) as? SimpleTextCell 

     if cell == nil { 
      tableView.registerNib(UINib(nibName: "SimpleTextCell", bundle: nil), forCellReuseIdentifier: identifier) 
      cell = tableView.dequeueReusableCellWithIdentifier(identifier) as? SimpleTextCell 
     } 

     let dayName = containArray[indexPath.row] 
     cell.lblProductName.text = dayName 


     return cell 
    } 

    //Handle click 
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     self.performSegueWithIdentifier("productListSegue", sender: self) 
    } 
} 
0

嘗試刪除 「!」,聲明此功能:

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

,並確保你已經設置委託和的tableview的數據源,以「自我」

+0

謝謝。可悲的是你的回答並沒有解決我的問題 – Jordan