2014-09-10 18 views
5

Sono nuovo nell'apprendimento dello sviluppo iOS e del linguaggio Swift e ho cercato di capire come creare un UITableViewCell personalizzato senza l'utilizzo di Storyboards/Interface Builder. Mi piacerebbe essere in grado di realizzare qualsiasi cosa nel codice Swift. Finora, sono stato in grado di trovare solo quelli che fanno uso di Interface Builder.Cella di visualizzazione tabella personalizzata in Swift, senza Storyboard

Quello che vorrei essere in grado di fare è creare una cella riutilizzabile che può essere istanziata in qualsiasi vista tabella. Da quanto ho capito dovrei essere in grado di creare una cella personalizzata con sotto-viste, i cui dati possono essere impostati dai dati in entrata della vista tabella. Destra?

In questo momento ho un UINavigationController con un UITableViewController incorporato in una sottoclasse. Seguendo alcuni altri tutorial ho anche imparato come creare una Struct e preparare i dati di test per la cella di visualizzazione tabella. Ma questo è quanto ho potuto ottenere.

// My Table View Controller 
class InventoryListViewController: MainTableViewController { 

    let viewTitle = "Inventory" 
    var inventoryItems = [InventoryItem]() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.navigationItem.title = viewTitle.uppercaseString 

     self.inventoryItems = [ 
      InventoryItem(name: "White Bread", expiry: "2014-09-12"), 
      InventoryItem(name: "Mushrooms", expiry: "2014-09-15"), 
      InventoryItem(name: "Watermelon", expiry: nil), 
      InventoryItem(name: "Leftover Thai", expiry: "2014-09-15"), 
      InventoryItem(name: "Cheddar Cheese", expiry: "2014-09-12"), 
      InventoryItem(name: "Chicken Breasts", expiry: "2014-09-10"), 
      InventoryItem(name: "Paprika", expiry: nil), 
      InventoryItem(name: "Sour Cream", expiry: nil) 
     ] 

     // Right now this will fail without tableView:cellForRowAtIndexPath 
     self.tableView.reloadData() 
    } 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return self.inventoryItems.count 
    } 

} 

// Sub-classed UITableViewController 
class MainTableViewController: UITableViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.tableView.separatorColor = UIColor.clearColor() 
     self.tableView.contentInset = UIEdgeInsetsZero 
    } 

} 

// Data struct for cells 
struct InventoryItem { 
    let name: String 
    let expiry: String? 
} 

Capisco Swift è ancora molto nuovo e questo è probabilmente il motivo non riesco a trovare troppe risorse per questo argomento, quindi se qualcuno ha qualche puntatori sarei molto riconoscente per l'aiuto!

risposta

9

È possibile utilizzare sotto codice per cellule personalizzati senza storyboard.Just registrare il class e utilizzarlo con tableViewController

//Cell.Swift 

import Foundation 
import UIKit 

class Cell : UITableViewCell{ 

    //Do whatever you want as exta customization 
} 

Il controller viewDidLoad

override func viewDidLoad() { 
    super.viewDidLoad() 

    // register your class with cell identifier 
    self.tableView.registerClass(Cell.self as AnyClass, forCellReuseIdentifier: "Cell") 
} 


//cellForRowAtIndexPath 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     var cell:Cell? = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as? Cell 
     if cell == nil { 

      cell = Cell(style: UITableViewCellStyle.Default, reuseIdentifier: "Cell") 
     } 
     //configure your cell custom code 
     cell.textLabel?.text = @"Your Label Text" 
     return cell! 
    } 
+0

Hmm. Questo sembra molto promettente, anche se quando lo provo, errori in 'self.configureCell' con' 'MainTableViewController' non hanno un membro chiamato 'configureCell''. Cosa farei di sbagliato qui? –

+0

Ho appena aggiunto 'confgureCell' affinché show esegua codice personalizzato. Puoi rimuoverlo e non è necessario. Puoi scrivere il tuo codice come vuoi impostare l'etichetta. Sto modificando il mio codice come per impostare label 'cell.textLabel? .text = @" Il tuo testo dell'etichetta "' – codester

+0

Ohh capisco. Grazie! Questo sembra funzionare! Tuttavia, se non ti dispiace spiegare ulteriormente - come aggiungo una nuova vista (come un'etichetta) alla cella personalizzata _within_ la classe 'Cell'? Ho provato a fare [questo] (http://tny.cz/b83cf1bf) ma non ha funzionato! –

Problemi correlati