Ios 对于创建所有UITableViewCell的UITableViewCell';以编程方式创建内容?

Ios 对于创建所有UITableViewCell的UITableViewCell';以编程方式创建内容?,ios,swift,uitableview,resource-management,Ios,Swift,Uitableview,Resource Management,我有一个自定义的表视图单元格,我用实用的方法创建它。 不使用IB插座 我想在界面生成器和代码中使用它 我想在用于静态表视图控制器的interface builder中使用它 动态表视图控制器的代码中 我不会使用.xib文件 经过几天的阅读,这是我到目前为止所学到的 // This method will be called when I create the cell programmatically override init(style: UITableViewCellStyle, re

我有一个自定义的表视图单元格,我用实用的方法创建它。 不使用IB插座

我想在界面生成器和代码中使用它

我想在用于静态表视图控制器的interface builder中使用它

动态表视图控制器的代码中

我不会使用.xib文件

经过几天的阅读,这是我到目前为止所学到的

// This method will be called when I create the cell programmatically 

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)

    commonInit()
}


// This will be called when a file is loaded from storyboard (or .xib)
// will not use xib only storyboard file (static table view cell)

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


// this will be called after init(coder) 
// when all IBOutlets are ready for use
// I'm currently not using this method
// because I don't have any IBOutlets 
// Not sure if I should use it

override func awakeFromNib() {
    super.awakeFromNib()
}
一切似乎都很好

在代码中使用单元格时,我手动注册单元格并重用它

这个代码好吗? 我似乎找不到任何关于每件事到底是如何运作的清晰解释。我在网上看到了所有我能找到的东西,但我一直在寻找不同的观点和想法。 我想清楚地解释一下什么时候应该使用每个初始化方法

例如,一些在线代码使用awakeFromNib和init(coder)方法。它们似乎在这两种方法中都调用了
commonInit()

我真的看不出有什么理由,因为这些都是一个接一个的

完全在代码中创建和使用UITableViewCell并不难。 我将给出一个可以创建的最简单单元的示例。您可以阅读文档以查看其他更复杂的单元格配置(带有图像、字幕等)

在类的顶部(在大括号之后),您应该为新单元定义一个标识符,该标识符与在故事板中使用的标识符不同

let cellIdentifier = "Cell"
在viewDidLoad中,您需要注册新单元格:

 tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellIdentifier)
然后,当您需要一个单元格时,您可以使用前面定义的标识符来请求它:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier)
    cell?.textLabel?.text = dataSource[indexPath.row].title
    return cell!
}
最后:

当使用nib/xib中的单元格而不是纯粹从代码中使用单元格时,您需要做的唯一更改是:

let cellNib = UINib(nibName: "DropDownCell", bundle: Bundle(for: DropDownCell.self))
从磁盘加载单元格,而不仅仅是初始值设定项,注册单元格时,注册刚刚创建的nib:

        tableView.register(cellNib, forCellReuseIdentifier: cellReuseIdentifier)
苹果Swift文档始终是最好的起点,以了解事物的用途

Matt Neuberg(他在这个网站上非常活跃)写了很多我买的书,他的“iOS编程”系列有一章是关于用NIB中的单元格配置布局的

Swift还有一个免费的在线课程,其中有一章介绍UITableViewCells。它向您展示了如何将单元格中的文本着色,使其稍微弹出

很多人对这里的教程都很满意:这些教程的好处是,你可以在代码快照之前和之后下载,这样你就可以看到一切都正常工作了

下面是一个关于使用autolayout自动调整单元格大小的示例

当你真的陷入困境时,你可以来这里[你已经在谷歌上搜索过,但仍然无法找到答案]。试着用一个你需要的例子问一些非常具体的问题,并展示你已经尝试过的东西。我想你会惊讶地发现,当你清楚地知道图片中缺少了什么时,有人会很快帮助你


我想我有点过火了,因为很明显你知道你在做什么。。。坚持下去,在我看来,你做得对。我同意阿迪尔的看法。你做得很好。您的想法或代码没有问题。谢谢,这让人放心。我还没有遇到任何问题。是的,这正是我在代码中创建initialize我的单元格的方式。这是否意味着您可以继续了?或者您还有问题吗?也许您可以为我指出正确的方向,让我从代码和nib文件中了解有关初始化的更多信息。这一切是如何运作的。对不起,我的问题不清楚。