sto usando Xcode 7.0, Swift 2cellForRowAtIndexPath non viene chiamato da classe personalizzata
praticamente sto cercando di creare una classe personalizzata che costruirà un UITable
, poi nel ViewController
Faccio un nuovo oggetto di il tavolo e caricarlo in self.view;
Il problema che sto avendo è che la funzione func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
non viene chiamata affatto dalla classe personalizzata. Ho cercato una soluzione per 3 giorni e ho provato a ricostruire l'app e codice diverse volte senza fortuna.
Nota: se utilizzo lo stesso codice (ovvero tutto ciò che è necessario per compilare la tabella, escluse le funzioni di inizializzazione, ecc.) Nel file ViewController.swift, funziona correttamente.
So che il problema è con la funzione cellForRowAtIndexPath
perché non stamperà la dichiarazione che ho impostato in quel blocco di codice quando viene eseguito. Vengono chiamate tutte le altre funzioni, ma per qualche motivo questo non viene chiamato. Non sono sicuro di aver trascurato qualcosa qui. Qualsiasi aiuto sarebbe apprezzato. Grazie in anticipo.
class sideTest: NSObject, UITableViewDelegate, UITableViewDataSource {
let tesTable: UITableView = UITableView()
var items: [String]?
var mView: UIView = UIView()
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print("The number of rows is: \(self.items!.count)")
return self.items!.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
print("\nLets create some cells.")
let sCell: UITableViewCell = tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell!
sCell.textLabel?.text = self.items![indexPath.row]
sCell.textLabel?.textColor = UIColor.darkTextColor()
return sCell
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
print("You selected cell #\(indexPath.row)!")
}
func tblSetup() {
self.tesTable.frame = CGRectMake(0, 0, 320, mView.bounds.height)
self.tesTable.delegate = self
self.tesTable.dataSource = self
self.tesTable.backgroundColor = UIColor.cyanColor()
// load cells
self.tesTable.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell")
self.tesTable.reloadData()
print("Currenlty in tblSetup.\nCurrent rows is: \(self.items!.count)")
}
//Init
override init() {
super.init()
self.items = nil
self.tblSetup()
}
init(sourceView: UIView , itemListAsArrayString: [String]) {
super.init()
self.items = itemListAsArrayString
self.mView = sourceView
self.tblSetup()
}
}
Ecco il codice di ViewController.swift; Si prega di notare che le tabelle vengono costruito, ma le cellule non popolano, anche se io inserire manualmente informazioni cellule facendo: sCell.textLabel?.text = "test cell"
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let myTable: sideTest = sideTest(sourceView: self.view, itemListAsArrayString: ["Cell 1", "Cell 2", "Cell 3"])
self.view.addSubview(myTable.tesTable)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
Ancora una volta, ogni aiuto è molto apprezzato. Grazie.
Si consiglia di utilizzare l'inizializzatore designato di 'UITableView' che è' init (frame frame: CGRect, style style: UITableViewStyle) 'ma non sono sicuro che questo farà la differenza. – Sulthan
La tua classe è impostata come origine dati della vista tabella? – quellish