将多个参数传递给addTarget

时间:2015-11-03 11:32:42

标签: ios swift uitableview

在我的UITableViewCell我有一个按钮。我想通过在cellForRowAtIndexPath方法中传递多个参数来为其添加操作。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("CartCell", forIndexPath:
        indexPath) as! CartTableViewCell
    cell.buyButton.addTarget(self, action: self.buyButton(indexPath, 2, 3 ,4 , 5, 6), forControlEvents: .TouchUpInside)
}

5 个答案:

答案 0 :(得分:37)

可能你可以做这样的事情

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("CartCell", forIndexPath:indexPath) as! CartTableViewCell
    cell.buyButton.tag = (indexPath.section*100)+indexPath.row
    cell.buyButton.addTarget(self, action: "btnBuy_Click:", forControlEvents: .TouchUpInside)
}

func btnBuy_Click(sender: UIButton) {
        //Perform actions here
     let section = sender.tag / 100
     let row = sender.tag % 100
     let indexPath = NSIndexPath(forRow: row, inSection: section)
     self.buyButton(indexPath, 2, 3 ,4 , 5, 6)
}

根据您的要求创建标签值,并保持其完整性。

答案 1 :(得分:11)

如果你需要传递字符串,只需使用UIButton的accessibilityHint。

Tag只能存储Int,所以如果有人想传递字符串数据就可以使用它。但是,这不是传递数据的正确方法!

示例:

button.accessibilityHint = "your string data"
button.addTarget(self, action: Selector(("buttonTapped")), for: UIControlEvents.touchUpInside)

func buttonTapped (sender: UIButton) {
   let section = sender.accessibilityHint
}

答案 2 :(得分:8)

我认为我们应该很好地构建代码。黑客只会使你的代码难以理解和错误。这是一些建议。

制作自定义按钮类

class CustomButton:UIButton {
var name:String = ""
var object:MyObjectClassType?

convenience init(name: String, object: MyObjectClassType) {
   self.init(frame:CGRectZero)
   self.name =name
   self.object = object!
}}

现在将按钮添加到按钮

let btn = your custom button
btn.name = “Your name”
btn.object = any object
btn.addTarget(self, action: #selector(myMethod(_:)), forControlEvents:.TouchUpInside)

现在只需在方法调用中获取您的值

  @IBAction func myMethod(sender:CustomButton) {
    print(sender.name)
}

答案 3 :(得分:5)

轻松!

1:子类module:start()

UIButton

2:设置您的值:

class IndexPathCellButton: UIButton {
    var indexPath:NSIndexPath?
}

3:检索您的值:

...
cell.indexPathButton.addTarget(self, action: #selector(LocationSearchViewController.cellOptionButtonClick(_:)), forControlEvents: .TouchUpInside)
cell.indexPathButton.indexPath = indexPath // Your value
...

答案 4 :(得分:2)

您可以使用UIButtons的tagtitleLabel上的UIImageView属性添加其他参数

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
{
let cell = tableView.dequeueReusableCellWithIdentifier("CartCell", forIndexPath:indexPath) as! CartTableViewCell
cell.buyButton.tag = (indexPath.section*100)+indexPath.row
cell.buyButton.imageView.tag = 2
cell.buyButton.titleLabel.tag = 3
cell.buyButton.addTarget(self, action: "btnBuy_Click:", forControlEvents: .TouchUpInside)
}