【问题标题】:Outlets are nil when having custom cell with XIB in UITableView in Storyboard with static cells在带有静态单元格的 Storyboard 中的 UITableView 中使用 XIB 自定义单元格时,出口为零
【发布时间】:2023-04-02 07:19:01
【问题描述】:

我想在故事板的UITableView 中使用静态单元格。 但我也希望从带有自定义 UITableViewCell 子类的自定义 .xib 文件中加载这些单元格。

我想这样做是因为我想在多个表格视图中重用单元格。

所以我在情节提要中添加了一些静态单元格,并在身份检查器中设置了自定义类。

但是当我想在自定义视图的 awakeFromNib 方法中访问 Outlets 时,它们是 nil。甚至在以后,它们也没有被实例化。

我怎样才能以正确的方式做到这一点?

【问题讨论】:

  • 给表格视图一个单元格类
  • 你能再解释一下吗@Arunsharma
  • 只是好奇...如果您使用 static 单元格,您希望对任何@IBOutlets 做什么?通常,设置 Outlets 以在运行时操作对象 - 这使得它不再是静态的。
  • 我说的是 @IBoutlets 到自定义 UITableViewCell 类。这些单元格作为静态添加到UITableView,并在UITableViewController 中有出口。所以我可以操作单元格中的视图并在其他表视图中重用相同的 UI。
  • OK - 那么您所描述的不是 static 表格视图...如果您有一个要在多个表格中使用的单元格设计 - 并且您想要操作该单元格中的元素(即使它只是更改标签的文本) - 那么您正在描述 dynamic 视图。您当然可以在单独的 xib 文件中设计您的单元格,然后动态使用它们,以防您认为自己做不到。

标签: ios swift uitableview storyboard xib


【解决方案1】:

如果您在情节提要中添加静态单元格,它们的功能类似于单独的 .xib 文件并覆盖您愿意使用的自定义 .xibs。

如果您想在多个表格视图中重复使用您的单元格,您应该在表格视图中使用动态单元格。动态单元通常也更具可持续性,尤其是在更大的应用程序中。

【讨论】:

  • 重点是,内容根本不是动态的。所以我想我可以在故事板中使用静态单元来节省实现UITableViewDataSource 逻辑的时间。
【解决方案2】:

好的,我想通了,这怎么可能:

我为我的UITableViewCell 创建了一个容器类,如此答案中所述: https://stackoverflow.com/a/34881072/4846592

该类包含一个属性,用于访问自定义单元格并在其初始化程序中加载 XIB

这是 Swift 3 的代码

class CustomTableViewCellContainer: UIView {    
var cell: CustomTableViewCell!

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        cell = Bundle.main.loadNibNamed("CustomTableViewCell", owner: self, options: nil)!.first as! TextFieldTableViewCell
        cell.frame = self.bounds
        cell.autoresizingMask = [.flexibleWidth]
        self.addSubview(cell)
    }
}

然后,我只是在 Storyboard 中的静态 UITableViewCell 的 ContentView 中添加了一个 UIView,并将高度和 CustomTableViewCellContainer 设置为自定义类名。 最后我添加了一个IBOutlet 来访问自定义单元格。

【讨论】:

    猜你喜欢
    • 2016-07-13
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多