使用部分向tableview添加项目

时间:2016-06-19 15:19:56

标签: ios swift uitableview

我将不同产品组的购物清单显示为包含多个部分的表格视图。我想为每个组添加带有添加按钮的项目。因此,我为标题单元格添加了UIToolbar和+符号作为UIBarButtonItem

enter image description here

现在每个产品组都有自己的添加按钮: enter image description here

如果按下了一个添加按钮,我在识别哪一个被按下时遇到问题。

  1. 如果我使用seque连接添加按钮,则函数prepareForSeque(...)会传递类型为UIBarButtomItem的发件人,但触发事件时没有与标题单元格的连接。
  2. 如果我将IBAction连接到UITableViewController,则收到的发件人也属于UIBarButtomItem类型,并且也没有与标题单元格的连接。
  3. 如果我将IBAction连接到我的CustomHeaderCell:UITableViewCell课程,我就可以识别出正确的标题单元格。
  4. 这行代码返回标题单元格标题:

    if let produktTyp = (sender.target! as! CustomHeaderCell).headerLabel.text
    

    但是,现在CustomHeaderCell类具有我需要的信息。 但是这些信息应该在UITableViewController

    中提供

    我找不到将信息反馈给UITableViewController的方法。

        import UIKit
    
    class CustomHeaderCell: UITableViewCell {
    
        @IBOutlet var headerLabel: UILabel!
    
        override func awakeFromNib() {
            super.awakeFromNib()
        }
    
        override func setSelected(selected: Bool, animated: Bool) {
            super.setSelected(selected, animated: animated)
        }
    
        @IBAction func neuesProdukt(sender: UIBarButtonItem) {
            if let produktTyp = (sender.target! as! CustomHeaderCell).headerLabel.text
            {
                print(produktTyp)
            }
        }
    }
    

1 个答案:

答案 0 :(得分:1)

以下是我通常如何处理这个问题:

使用Closure捕获正在按下的项目的动作

class CustomHeaderCell: UITableViewCell {

    @IBOutlet var headerLabel: UILabel!

    var delegate: (() -> Void)?

    @IBAction func buttonPressed(sender: AnyObject) {
        delegate?()
    }
}

创建单元格时,创建一个捕获索引路径或相应部分的闭包。

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
    let section = indexPath.section
    let cell = createCell(indexPath)

    cell.delegate = { [weak self] section in
        self?.presentAlertView(forSection: section)
    }

}