如何在swift中将标题视图添加到每个自定义tableViewCells

Posted

技术标签:

【中文标题】如何在swift中将标题视图添加到每个自定义tableViewCells【英文标题】:how to add header view to each of custom tableViewCells in swift 【发布时间】:2021-02-26 17:12:44 【问题描述】:

我有两个自定义 TableViewCell。所以第一个 TableViewCell 就像一个最近的列表,它可以变得更长。但第二个单元格始终停留在底部。所以我需要添加持有 secondTableViewCell 的 UILabel。 the result that i need.

import UIKit

class bagPage: UIViewController, UITableViewDelegate, UITableViewDataSource 
    var itemsName: [String] = []
    var itemsPhoto: [UIImage] = []
   // these arrays will defined in other view controller
    
    @IBOutlet weak var tableView: UITableView!
        override func viewDidLoad() 
        super.viewDidLoad()
        
        tableView.dataSource = self
        tableView.delegate = self
       
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 
        
        if indexPath.row < itemsName.count
            return 165
        else
            return 50
        
        
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        
        return  6 + itemsName.count
    
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        
        
        if indexPath.row < itemsName.count
            
            let cell = tableView.dequeueReusableCell(withIdentifier: "bagTableViewCell") as? bagTableViewCell
            cell?.itemName.text = itemsName.last
            cell?.itemPhoto.image = itemsPhoto.last
            return cell!
        
        if indexPath.row == itemsName.count 
            let cellTwo = tableView.dequeueReusableCell(withIdentifier: "extraBagPageTableView") as? extraBagPageTableView
            // here i'm hiding views in first row
            cellTwo?.textLabel?.text = "These are products that u can add to your cell"

            return cellTwo!
            
        else
            let cellTwo = tableView.dequeueReusableCell(withIdentifier: "extraBagPageTableView") as? extraBagPageTableView
            return cellTwo!
        
        
    
    

【问题讨论】:

我想我的其他解决方案不是您想要的,请允许我再次尝试并提供帮助。我认为我的困惑是您所说的包含第二个 tableview 单元格的标签的方式。你的意思是什么,因为你的图片没有让问题更清楚?试着解释你所说的保持是什么意思。你想让第二个单元格中的标签做某事吗? 看,我将两个 UITableViewCells 拖到了我的 tableView 中。第一个可以通过用户的操作变长。但第二个,总是停留在底部,我需要一个 UILabel 来描述第二个单元格的内容。我添加了我的故事板的照片 否则它们在第一个单元格中可以是无限行,但第二个单元格中只有五个,并且标签应该像第二个单元格的第一行。我希望你能理解我。 我将两个 UITableViewCells 拖到了我的 tableView 中。 OK - 第一个可以通过用户的操作变得更长。好的 - 但第二个,总是留在底部好的 - 我需要一个 UILabel 来描述第二个单元格的内容。不行 你需要解释一下这个标签是什么。图片不解释。 否则它们在第一个单元格中可以是无限行 好的,我知道根据用户交互,单元格可以变长 - 第二个单元格您还没有清楚地解释它的不同之处。我真的很想帮助你,但我很难理解第二个单元格中的标签是做什么的 【参考方案1】:

这是提供解决方案的另一种尝试。这是你要找的吗?

这是项目的链接 https://drive.google.com/file/d/1XlSF4fGiNzOqQHauiNo7TuFhKUTrFbsJ/view?usp=sharing

如果您需要更多帮助,请告诉我

【讨论】:

如果“产品编号...”和“在此处添加更多产品”是两个不同的单元格,是的! 它们是不同的细胞是的 是的,看来这就是我想要实现的目标 我添加了完整项目的链接 我向项目发送了请求【参考方案2】:

晚上好,所以我按照您的图片制作了代码,并按照您的 1 个表格视图部分、2 个不同单元格的约定。我尝试使用您的命名约定。注意我必须交换高度值,你把它们弄错了。

   class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource 
    
        @IBOutlet weak var tableView: UITableView!
        var itemsName: [String] = ["Helmet", "Gloves", "Bindings", "Goggles", "Kneepads", "Boots", "Snowboard"]
        
        override func viewDidLoad() 
            super.viewDidLoad()
        
        
        func numberOfSections(in tableView: UITableView) -> Int 
            return 1
        
    
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
            return 1 + itemsName.count
        
        
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
            
            if indexPath.row < itemsName.count
                let bagTableViewCell = tableView.dequeueReusableCell(withIdentifier: "BagTableViewCell") as? BagTableViewCell
                bagTableViewCell?.productsLabel.text = itemsName[indexPath.row]
                return bagTableViewCell!
             else 
                let extraBagPageTableView = tableView.dequeueReusableCell(withIdentifier: "ExtraBagPageTableView") as? ExtraBagPageTableView
                return extraBagPageTableView!
            
        
        
        func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 
            if indexPath.row < itemsName.count 
                return 50
             else 
                return 165
            
        
    

还有表格视图单元格。请注意,第二个单元格的名称不好。

class BagTableViewCell: UITableViewCell 
    @IBOutlet weak var additionalProductsLabel: UILabel!
    @IBOutlet weak var productsLabel: UILabel!
    @IBOutlet weak var productImage: UIImageView!


class ExtraBagPageTableView: UITableViewCell 
    

它看起来像这样

项目可以在这里找到。 (这次我正确设置了权限:))

TableCellWithLabel Project

【讨论】:

你好。看起来就像你将 uilabel 添加到第二个单元格。但不要伪造我在第二个单元格中有 5 行 看起来我找到了一个解决方案,但滚动时它是一个包。我在答案中定义了当前代码。你可以尝试在你的代码中实现它吗? 我在第二个单元格中添加了一行,并隐藏了所有视图,而不是在其中添加了文本。但如果用户将 6-7 个项目添加到包中,则文本标签会更改位置。尝试向两个数组添加 7-8 个项目 这就是为什么第一个解决方案更适合您的原因,使用节标题意味着无论第一节或第二节中有多少单元格,都只会有一个额外的标签。我建议我们切换回第一个解决方案,我将帮助您调整代码以使用它。这可能是大约 10 行额外的代码,但总体上是一个更好的解决方案。我将使用第一个解决方案更新项目,也许我们可以讨论不和谐或在 SO 聊天中完成。不过会晚一点。 好的。我没有使用不和谐。应该发送链接或类似的东西?

以上是关于如何在swift中将标题视图添加到每个自定义tableViewCells的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中将内容包装为自定义视图

在 Swift 中将自定义 UITableViewCell 共享到多个 UITableViewController

如何在所有视图控制器中将自定义 uibarbuttonItem 添加到我的导航项?

如何在 Swift 中将值从自定义单元格设置/传递到视图控制器

如何以编程方式将自定义 uiview 添加到视图控制器 SWIFT

使用 Swift 在 SpriteKit 中将自定义“数字”图像作为分数添加到 SKLabelNode