确定在Swift中自定义listView单元格中按下的按钮

时间:2014-09-01 19:03:28

标签: objective-c listview swift uibutton

我在Swift中为listView创建了一个自定义单元格。它上面有两个按钮 - 一个是“暂停”按钮,另一个是“停止”按钮。我们的想法是每个订单项代表一个下载,以便用户可以独立停止和启动每个订单项。

但是,我需要为每个按钮创建一个@IBAction。我已经在主ViewController中创建了这些,当然,当它们连接起来时,它们会触发相应的。

我坚持的位是识别按下了哪一行按钮的标识符。我假设与cellForRowAtIndexPath相关的东西可以工作。

我找到了以下代码(我从类似的文本字段问题中找到):

@IBAction func startOrPauseDownloadSingleFile(sender: UIButton!) {
    let pointInTable: CGPoint = sender.convertPoint(sender.bounds.origin, toView: self.tableView)
    let cellIndexPath = self.tableView.indexPathForRowAtPoint(pointInTable)
}

但是我不断收到错误'无法使用类型的参数列表调用'convertPoint'(@lvalue CGPoint,toView:$ T6)'。

有人可以帮忙吗?

谢谢,

1 个答案:

答案 0 :(得分:4)

我把你的代码嵌入到一个简单的项目中。

在Interface Builder 中,我创建了一个UITableViewController场景,并将其类设置为" ViewController"。我添加了一个UITableViewCell,将其标识符设置为" Cell",将其样式设置为" Custom"和#34; CustomCell"。然后我在单元格的contentView中添加了一个UIButton,并为它设置了非模糊的自动布局约束。

在Project Navigator 中,我创建了一个名为" ViewController"的新文件。并在其中添加了以下代码:

import UIKit

class CustomCell: UITableViewCell {

    @IBOutlet weak var button: UIButton!

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

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

    override func awakeFromNib() {
        super.awakeFromNib()
    }

    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
    }

}

class ViewController: UITableViewController {

    func buttonPressed(sender: AnyObject) {
        let pointInTable: CGPoint = sender.convertPoint(sender.bounds.origin, toView: self.tableView)
        let cellIndexPath = self.tableView.indexPathForRowAtPoint(pointInTable)
        println(cellIndexPath)
    }

    override func awakeFromNib() {
        super.awakeFromNib()
    }

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 10
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as CustomCell
        cell.selectionStyle = .None

        cell.button.addTarget(self, action: "buttonPressed:", forControlEvents: UIControlEvents.TouchUpInside)

        return cell
    }

}

我最终将按钮的IBOutlet链接到Interface Builder中的UIButton,运行项目并能够从每个按钮触摸记录相应单元格的索引路径。