我将不同产品组的购物清单显示为包含多个部分的表格视图。我想为每个组添加带有添加按钮的项目。因此,我为标题单元格添加了UIToolbar
和+符号作为UIBarButtonItem
。
如果按下了一个添加按钮,我在识别哪一个被按下时遇到问题。
prepareForSeque(...)
会传递类型为UIBarButtomItem
的发件人,但触发事件时没有与标题单元格的连接。IBAction
连接到UITableViewController
,则收到的发件人也属于UIBarButtomItem
类型,并且也没有与标题单元格的连接。IBAction
连接到我的CustomHeaderCell:UITableViewCell
课程,我就可以识别出正确的标题单元格。这行代码返回标题单元格标题:
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)
}
}
}
答案 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)
}
}