2014-09-10 34 views
5

iOS geliştirme ve Swift dilini öğrenmek için yeni biriyim ve Storyboards/Interface Builder kullanmadan özel bir UITableViewCell nasıl oluşturulacağını anlamaya çalışıyorum. Swift kodundaki her şeyi başarmak istiyorum. Şimdiye kadar, sadece Interface Builder'dan yararlananları bulabildim.Özel masa görünümü, Swift'de, Storyboard olmadan

Yapmak istediğim, herhangi bir tablo görünümünde başlatılabilen yeniden kullanılabilir bir hücre oluşturmaktır. Anladığım kadarıyla, alt görünümlere sahip özel bir hücre oluşturabilmem gerekir. Kimin verileri tablo görünümünün gelen verileriyle ayarlanabilir. Sağ?

Şu anda UITableViewController gömülü, alt sınıflanmış bir UINavigationController sahibim. Diğer bazı eğiticilerin ardından, bir yapı oluşturmayı ve tablo görüntüleme hücresi için test verilerini nasıl hazırlayacağımı da öğrendim. Ama alabildiğim kadarıyla. Ben Swift anlıyorum

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

hala çok yeni olduğuna ve bu konu için çok fazla kaynak bulamıyor neden muhtemelen, bu yüzden kimse herhangi işaretçiler varsa ben yardımına minnettar olacaktır!

cevap

9

Sen class kayıt storyboard.Just içermeyen özel hücreler için kodunun altına kullanmak ve tableViewController

//Cell.Swift 

import Foundation 
import UIKit 

class Cell : UITableViewCell{ 

    //Do whatever you want as exta customization 
} 

Kişisel kontrolör 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 ile kullanabilirsiniz. Bu çok umut verici görünüyor, ama ben 'selfTimeViewController' ile 'self.configureCell' hatalarını denediğinizde 'configureCell' adlı bir üye yok. Burada ne yapıyorum ki? –

+0

Özel kod yapmak için şov için 'confgureCell' ekledim.Onu kaldırabilir ve buna gerek yok. Label.I ayarlamak istediğim her şeyi kendi kodunuzu yazabilirim. label.oldxtLabel? .text = @ "Etiket Yazınız" ' – codester

+0

Ohh Anlıyorum. Teşekkür ederim! Bu işe yarıyor! Yine de, açıklamayı daha fazla düşünmüyorsanız - hücre türünde _within_ hücresine nasıl yeni bir görünüm (etiket gibi) ekleyebilirim? [Bu] yapmayı denedim (http://tny.cz/b83cf1bf) ama işe yaramadı! –

İlgili konular