2016-04-07 38 views
1

Swift kullanarak bir slayt çıkışı menüsü oluşturdum. Bunu daha önce defalarca yaptım, ama bugün oluşturduğumda, bu hatayı alıyorum (ekran görüntüsüne bakın). Yaptığım basit bir hata olabilir. İşte Swift: Tablo görünümü superclass hatası

ben soruna neden olduğunu düşündüğü, kod şudur:

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 
} 

Ekran Görüntüsü:

enter image description here

GÜNCELLEME: ben denedim çıkarmadan override

enter image description here

Umarım birileri yardım edebilir!

+0

@RDC sayesinde döndürür, ancak işe yaramadı

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

. Güncelleme – Jordan

+0

Gerçekten ** UITableView' delegeleri için gerekli olan protokolleri ** uyguladınız mı? 'classIntViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {/ * ... * /} ' –

+0

@ AlejandroIván Evet – Jordan

cevap

2

imza yanlış olduğu için üst sınıfın herhangi bir yöntem geçersiz kılmaz yöntemine temsilci ve tableview veri kaynağı belirledik emin olun.

doğru imza

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

Tüm parametreler isteğe bağlı olmayan türleridir olduğunu.

Ve kullanımı da önerilen yöntem de her zaman öneri için isteğe bağlı olmayan bir tip

+0

Yardımlarınız için teşekkürler! Cevabın ilk kısmı sorunu çözdü (imza parçası) ama izin verilen hücre, “çözülmemiş tanımlayıcı 'hücre tanımlayıcısı” alıyorum "Herhangi bir fikir? – Jordan

+0

'cellIdentifier' yerine literal' 'Cell '' sözcüğünü kullanın ve 'nil' kontrolünü ve tüm gereksiz ünlem işaretlerini kaldırın. – vadian

+0

Çok teşekkür ederim! Cevap ver, problemimi çözdü! Yardım ettiğin için teşekkür ederim! – Jordan

0

Sınıfınızın, UITableViewDelegate ve UITableViewDataSource'u uyguladığından emin olun. Başka üst sınıf zaten bu yöntemleri uygulayan sürece

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

Sen override anahtar kelime gerekmez. Beni

  • Sadece UITableViewDelegate ve UITableViewDataSource
  • uygulamak gerekli yöntemleri

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

Şimdiye kadar çok teşekkürler! Cevabınızın bir kısmı benim problemimi çözdü, ama 'geçersiz kılmayı' kaldırdığımda, çözümlenmemiş tanımlayıcı 'hücre tanımlayıcısı' kullanıyorum. Herhangi bir fikir? – Jordan

0

bu Bkz çıkarmadan deneyin çalışır "!", bu işlev için beyanıdır :

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

ve "öz"

0

onaylamak için

+0

Teşekkürler.Ne yazık ki cevabınız benim problemimi çözmedi – Jordan

İlgili konular