【问题标题】:Custom table view cell in Swift, without StoryboardSwift中的自定义表格视图单元格,没有故事板
【发布时间】:2014-09-10 16:41:51
【问题描述】:

我是学习 iOS 开发和 Swift 语言的新手,并且一直在尝试弄清楚如何在不使用 Storyboard/Interface Builder 的情况下创建自定义 UITableViewCell。我希望能够用 Swift 代码完成所有事情。到目前为止,我只能找到使用 Interface Builder 的工具。

我想做的是创建一个可以在任何表格视图中实例化的可重复使用的单元格。据我了解,我应该能够创建一个带有子视图的自定义单元格,可以通过表格视图的传入数据设置谁的数据。对吧?

现在我有一个 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?
}

我知道 Swift 还很新,这可能是我找不到太多关于这个主题的资源的原因,所以如果有人有任何指点,我会非常感激帮助!

【问题讨论】:

    标签: ios uitableview swift


    【解决方案1】:

    您可以将以下代码用于没有故事板的自定义单元格。只需注册您的 class 并将其与 tableViewController 一起使用

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

    【讨论】:

    • 嗯。这看起来很有希望,尽管当我尝试它时,它在self.configureCell'MainTableViewController' does not have a member named 'configureCell' 处出错。我在这里会做错什么?
    • 我刚刚添加了confgureCell 用于显示自定义代码。您可以删除它,不需要它。您可以编写自己的代码,如设置标签。我我正在编辑我的代码,比如设置标签cell.textLabel?.text = @"Your Label Text"
    • 哦,我明白了。谢谢!这似乎有效!不过,如果您不介意进一步解释 - 我如何在 Cell 的自定义单元格中添加新视图(如标签)?我尝试过this,但没有成功!
    • @JodyHeavener 不使用 awakeFromNib 它仅在您使用 storyBoard 时调用。在 Cell.swift 中制作自定义方法如 setUpCell 并在 cellForRowAtIndexPath 中调用它如 cell.setUpCell()
    • 抱歉打扰了,您帮了大忙!我似乎无法让它发挥作用——我可能听错了你的建议。这是我为尝试向单元格添加视图所做的工作...tny.cz/a57fdcb0
    猜你喜欢
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    • 2015-12-02
    • 2012-01-26
    相关资源
    最近更新 更多