在同一单元格SWIFT中轻触UIButton访问自定义单元格对象属性

时间:2015-02-19 20:31:37

标签: ios uitableview swift

我有一个自定义单元格设置,带有加减按钮和数量标签。我希望视图控制器中的标签能够以单元格中显示的价格进行更新。

我搜索了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。

希望这很清楚,我对编程很陌生,所以请耐心等待我的术语,我知道它不是很好!谢谢你的帮助。

1 个答案:

答案 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)

}'

注意**我并不是说这是一个很好的方法,但它对我有用,如果它对你有帮助,那就完美了。