2016-04-07 3 views
1

Ich habe mit Swift ein Ausklappmenü erstellt. Ich habe das schon oft gemacht, aber als ich es heute erstellt habe, bekomme ich diesen Fehler (siehe Screenshot). Es könnte nur ein einfacher Fehler sein, den ich gemacht habe. HierSwift: Tabellenansicht Superklassenfehler

ist der Code, dass ich denke, das Problem verursacht:

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 
} 

Screenshot:

enter image description here

UPDATE: Ich habe versucht, das Entfernen override

enter image description here

Hoffe jemand kann helfen!

+0

@RDC Danke für die Anregung zurück, aber hat nicht funktioniert. Siehe Update – Jordan

+0

Haben Sie tatsächlich ** die für die 'UITableView' Delegierten erforderlichen Protokolle ** implementiert? 'Klasse YourViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {/ * ... * /}' –

+0

@ AlejandroIván Ja – Jordan

Antwort

2

Verfahren keine Methode der Oberklasse festgelegt haben, da die Signatur nicht stimmt.

Die korrekte Signatur ist

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

Alle Parameter sind nicht optionale Typen.

Und Verwendung auch die empfohlene Methode

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

die auch immer eine nicht optionale Typ

+0

Danke für deine Hilfe! Der erste Teil der Antwort hat das Problem gelöst (der Unterschriftsbereich), aber die Zelle lassen, ich bekomme "unaufgelöster Bezeichner 'cell Identifier'" Irgendwelche Ideen? – Jordan

+0

Statt 'cellIdentifier' benutzen Sie Ihr Literal' "Cell" 'und entfernen Sie die' nil' Kontrolle und alle unnötigen Ausrufezeichen. – vadian

+0

Vielen Dank! Du hast mein Problem gelöst! Danke für Ihre Hilfe! – Jordan

0

Stellen Sie sicher, dass Ihre Klasse UITableViewDelegate und UITableViewDataSource implementiert.

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

Sie nicht brauchen override Schlüsselwort es sei denn, eine andere übergeordnete Klasse bereits diese Methoden implementiert.

+0

Vielen Dank! Ein Teil Ihrer Antwort hat mein Problem gelöst, aber wenn ich 'override' entferne, bekomme ich den nicht aufgelösten Bezeichner 'cell Identifier'. Irgendwelche Ideen? – Jordan

0

das Sehen funktioniert für mich

  • Nur UITableViewDelegate bestätigen und UITableViewDataSource
  • Umsetzung erforderlichen Methoden

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

Versuchen zu entfernen "!", Erklärung für diese Funktion ist :

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

und stellen Sie sicher, dass Sie delegieren und Datenquelle von Tableview auf „Selbst“ außer Kraft setzen

+0

Danke.Leider hat deine Antwort mein Problem nicht gelöst – Jordan