2014-09-10 108 views
5

我不熟悉iOS开发和Swift语言,并且一直试图找出如何在不使用Storyboard/Interface Builder的情况下创建自定义UITableViewCell。我希望能够完成Swift代码中的所有内容。到目前为止,我只能真正找到使用Interface Builder的人。Swift中没有Storyboard的自定义表格视图单元格

我希望能够做的是创建一个可以在任何表视图中实例化的可重用单元。据我所知,我应该能够创建一个具有子视图的自定义单元格,其数据可以由表视图的传入数据设置。对?

现在我有一个UINavigationController与嵌入式,子分类UITableViewController。继其他一些教程之后,我还学习了如何创建一个Struct并为表格视图单元格准备测试数据。但是,就我所能得到的那样。

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

我明白雨燕还是很新的,这可能是为什么我不能为这个主题找到太多的资源,因此,如果任何人有任何指针,我会很感激的帮助!

回答

9

您可以使用下面的代码定制细胞无storyboard.Just注册classtableViewController

//Cell.Swift 

import Foundation 
import UIKit 

class Cell : UITableViewCell{ 

    //Do whatever you want as exta customization 
} 

你的控制器的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

嗯使用它。这看起来非常有希望,但是当我尝试使用''MainTableViewController'在'self.configureCell'出现错误时,没有名为'configureCell'的成员。我会在这里做错什么? – 2014-09-10 17:13:21

+0

我刚刚添加了'confgureCell',用于显示自定义代码。您可以将其删除并且不需要它。您可以编写自己的代码,无论您希望如何设置标签,我都可以编辑代码。标签'cell.textLabel?.text = @“Your Label Text”' – codester 2014-09-10 17:30:25

+0

哦,我明白了。谢谢!这似乎工作!但是,如果您不介意进一步解释 - 我如何向“Cell”类中的自定义单元添加新视图(如标签)?我试着做[这](http://tny.cz/b83cf1bf),但它没有奏效! – 2014-09-10 17:49:33

相关问题