【问题标题】:Loading a custom TableViewCell from Storyboard instead of nib从 Storyboard 而不是 nib 加载自定义 TableViewCell
【发布时间】:2016-03-19 13:37:36
【问题描述】:

我是 StackOverflow 的新手,并且一直在为这个问题苦苦挣扎,真的希望有人可以帮助并指出正确的方向。

我正在尝试制作自定义 UITableView 和自定义 UITableViewCell - 它们将一起形成自定义 UITableView,我希望在多个项目中重复使用。所以我要做的是将所有行+键盘处理等封装在自定义UITableView中,并将单元格的外观封装在自定义UITableViewCell中。

在一个新的 StoryBoard 中,我添加了一个 UIViewController 并添加了一个 UITableView,设计了我希望表格的外观并向其中添加了一个原型单元格。我用适当的标签、字段和约束设计了这个。让我们将此自定义外观表称为“MyCustomTableWithCustomCell”

所以现在我有了我的自定义表格,我想要在其他 Storyboard 中重复使用它。

我找到了一种解决方案(感谢 stackoverflow!),但这并不是我想要的:

  • 我从MyCustomTableWithCustomCell中提取了原型单元格(剪切 并粘贴到 Empty Interface Builder 文档中)并将其保存为 西布。
  • 然后我通过 registerNib() 在我的自定义 UITableView 中使用它
  • 我可以在任何 Storyboard 中创建一个新的UIViewController,添加一个 UITableView,将其类设置为MyCustomTableWithCustomCell,它将 做我想做的事

问题是,我不喜欢单元格在单独的 xib 文件中的方式,因为它无法通过 IB 自动预览在不同的设备尺寸上轻松预览。无论我选择哪种设备尺寸,它看起来总是一样的。除非我每次想要更改任何内容时都在模拟器中构建和预览,否则很难看出设计如何与屏幕的其余部分匹配。如果单元格设计可以作为原型 TableViewCell 的一部分保留在蓝图故事板中,我更愿意。然后我可以轻松地对其进行修改,预览不同设备尺寸等。

所以我的问题是,做同样事情的最佳方法是什么,而不是使用 xib 文件,而是使用故事板中的原型表单元作为蓝图。或者换句话说,有没有办法在运行时将 Prototype 单元格提取到 Nib 中,以便我可以在创建自定义表时注册它。

例如。类似:

    var myTableCellNib = myStoryBoard.myViewController.myTableView.myPrototypeCell.getNib()
    registerNib(myTableCellNib)

期待听到您的想法!

【问题讨论】:

    标签: ios xcode swift uitableview storyboard


    【解决方案1】:

    制作UITableViewCell Swift 文件-

    import UIKit
    
        class ClassName: UITableViewCell {
    
        @IBOutlet weak var lblData: UILabel!
    
    
        override func awakeFromNib() {
            super.awakeFromNib()
    
    
        }
    
        override func setSelected(selected: Bool, animated: Bool) {
            super.setSelected(selected, animated: animated)
    
            // Configure the view for the selected state
        }
    
    }
    

    转到storyboard -> View Controller -> Table View -> 拖放表格视图单元并设计它,给类名作为ClassName和标识符。

    转到cellForRowAtIndexPath

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
    {
        var cell : ClassName! = tableView.dequeueReusableCellWithIdentifier("identifier") as! ClassName
        cell.lblData.text = ""
        return cell as ClassName
    }
    

    【讨论】:

    • 感谢您抽出宝贵时间回复!但实际上,这样做是不是意味着每次我想使用我的自定义单元格设计时,我都必须将整个单元格复制并粘贴到一个新的表格视图中?而我想要的只是能够为我的自定义类设置一个新的 tableview 类,然后一切都通过 nib 以编程方式创建(这个 nib 是从我的蓝图故事板中读取的)。我希望表格单元格的设计可重用并通过单个源加载(例如,当前是一个 xib 文件,但更喜欢从情节提要)
    猜你喜欢
    • 1970-01-01
    • 2014-05-18
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    相关资源
    最近更新 更多