2014-09-10 43 views
5

Ich bin neu zu iOS Entwicklung Lernen und die Swift Sprache, und haben versucht, herauszufinden, wie eine benutzerdefinierte UITableViewCell ohne die Verwendung von Storyboards/Interface Builder zu erstellen. Ich würde gerne alles im Swift-Code ausführen können. Bisher habe ich nur wirklich solche gefunden, die den Interface Builder nutzen.Benutzerdefinierte Tabellenansicht Zelle in Swift, ohne Storyboard

Was Ich mag wäre in der Lage sein, eine wiederverwendbare Zelle zu tun ist, erstellen, die in jeder Tabellenansicht instanziiert werden können. Nach meinem Verständnis sollte ich in der Lage sein, eine benutzerdefinierte Zelle mit Unteransichten zu erstellen, deren Daten durch die eingehenden Daten der Tabellenansicht festgelegt werden können. Recht?

Im Moment habe ich eine UINavigationController mit einem eingebetteten, untergeordneten UITableViewController. Nach einigen anderen Tutorials habe ich auch gelernt, wie man ein Struct erstellt und Testdaten für die Tabellenansichtszelle vorbereitet. Aber das ist ungefähr so ​​weit, wie ich es bekommen konnte.

// 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? 
} 

ich Swift verstehen ist noch sehr neu und das ist wahrscheinlich, warum ich nicht zu viele Ressourcen für dieses Thema finden, so dass, wenn jemand irgendwelche Hinweise hat, würde ich auf die Hilfe sehr dankbar!

Antwort

9

Sie können Ihre class unten Code für benutzerdefinierte Zellen ohne storyboard.Just registrieren und verwenden Sie es mit tableViewController

//Cell.Swift 

import Foundation 
import UIKit 

class Cell : UITableViewCell{ 

    //Do whatever you want as exta customization 
} 

Ihr 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 verwenden. Das sieht sehr vielversprechend aus, aber wenn ich es ausprobiere, haben Fehler an 'self.configureCell' mit' 'MainTableViewController' kein Member namens 'configureCell'. Was würde ich hier falsch machen? –

+0

Ich habe soeben 'confgureCell' hinzugefügt, damit Show benutzerdefinierten Code ausführen kann. Sie können es entfernen und es besteht keine Notwendigkeit. Sie können Ihren eigenen Code schreiben, was auch immer Sie tun möchten, wie das Label. Ich bearbeite meinen Code gerne label 'cell.textLabel? .text = @" Dein Etikettentext "' – codester

+0

Ohh, ich verstehe. Vielen Dank! Das scheint zu funktionieren! Aber wenn es Ihnen nichts ausmacht, weiter zu erklären - wie füge ich der benutzerdefinierten Zelle _within_ der Klasse 'Cell' eine neue Ansicht (wie eine Beschriftung) hinzu? Ich habe versucht [dies] (http://tny.cz/b83cf1bf), aber es hat nicht funktioniert! –

Verwandte Themen