在我的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)
}
答案 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的tag
和titleLabel
上的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)
}