我有一个自定义单元格设置,带有加减按钮和数量标签。我希望视图控制器中的标签能够以单元格中显示的价格进行更新。
我搜索了SE和谷歌机器,但所有示例都是针对Objective-C的,并且对将indexPath.row
传递给选择器感到满意。我设法将添加按钮被轻敲的行传递给选择器方法,但我无法访问单元格中的对象,例如cell.itemNameLabel.text
我尝试在选择器方法中实现类似于objective-c的东西:没有快乐。
UITableViewCell* cell = (UITableViewCell*)[sender superview];
NSIndexPath* indexPath = [myTableView indexPathForCell:cell];
这是我的设置:
自定义单元格:
class ProductListTableViewCell: UITableViewCell {
@IBOutlet var itemNameLabel: UILabel! = UILabel()
@IBOutlet weak var itemImage: UIImageView! = UIImageView()
@IBOutlet var itemPriceLabel: UILabel! = UILabel()
@IBOutlet weak var itemQty: UILabel!
@IBOutlet weak var addItem: UIButton! = UIButton()
主视图控制器:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell:ProductListTableViewCell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as ProductListTableViewCell
let drink:PFObject = self.productListData.objectAtIndex(indexPath.row) as PFObject
cell.itemImage.layer.cornerRadius = cell.itemImage.frame.size.width / 2
cell.itemImage.clipsToBounds = true
cell.addItem.tag = indexPath.row
cell.addItem.addTarget(self, action:("cellAddItemAction:"), forControlEvents: UIControlEvents.TouchUpInside)
cell.itemNameLabel.text = drink.objectForKey("name") as? NSString
cell.calorieLabel.text = drink.objectForKey("calories") as? NSString
cell.itemPriceLabel.text = drink.objectForKey("price") as? NSString
cell.itemImage.alpha = 1
let itemImage = drink["image"] as PFFile
itemImage.getDataInBackgroundWithBlock{
(imageData: NSData!, error: NSError!) -> Void in
if error == nil {
let image = UIImage(data: imageData)
cell.itemImage.image = image
}
}
}
)
return cell
}
选择器方法:
func cellAddItemAction(sender: UIButton){
println("pressed \(sender.tag)")
}
这样可行但我需要更改单元格中的对象,例如cell.itemQty.text。
希望这很清楚,我对编程很陌生,所以请耐心等待我的术语,我知道它不是很好!谢谢你的帮助。
答案 0 :(得分:1)
好的,所以我的方式略有不同。这是一个原型应用程序,只需要似乎工作。如果它对任何人都有帮助的话,那就是我所做的。
在cellForRowAtIndexPath
:
cell.addItem.tag = indexPath.row
然后在添加目标时,使用单元格:
,而不是使用Self cell.addItem.addTarget(cell, action:("cellAddItemAction:"), forControlEvents: UIControlEvents.TouchUpInside)
在viewController中声明一个全局变量:
let priceUpdateKey = "com.ordr.priceUpdateKey"
现在在单元类中编写函数,并添加NSNotification方法,在userInfo参数中发送数据
func cellAddItemAction(sender: UIButton){
var count = (String(self.itemQty.text!)).toInt()!
totalPrice = (self.itemPriceLabel!.text! as NSString).doubleValue
count += 1
NSNotificationCenter.defaultCenter().postNotificationName(priceUpdateKey, object: nil, userInfo: ["totalPrice":totalPrice])
}
然后返回viewController,添加NSNotification的观察者:
NSNotificationCenter.defaultCenter().addObserver(self, selector: "updatePrice:", name: priceUpdateKey, object: nil)
最后编写观察者调用的函数:
func updatePrice(sender: NSNotification) {
let userInfo:Dictionary<String,Double!> = sender.userInfo as Dictionary<String,Double!>
let messagePrice = userInfo["totalPrice"]
let finalCalc = totalAmount + messagePrice!
totalAmount = finalCalc
totalPriceButton.setTitle("£\(totalAmount)0", forState: UIControlState.Normal)
}'
注意**我并不是说这是一个很好的方法,但它对我有用,如果它对你有帮助,那就完美了。