一个有关 tableview 里 cell 的一个物件使用上的问题 ....

陳尹
  • 348

这备问题基本上跟cell 使用没有关系,比较跟元件上使用的观念有关系....(资质愚钝)

我先作了,一个 UItableViewCell 一个增加数量的button 一个减少数量的button ,跟一个显示数量的button , 但我在uitableviewcell里 都没有作addtarget funcion 设定

class cartTableViewCell:UITableViewCell {
let lessButton = UIButton(frame: CGRectMake(numTitleLabel.frame.origin.x + numTitleLabel.frame.size.width + 5, 5, 30,numObjectView.frame.size.height-10))
    (button属性设定,省略)
    numObjectView.addSubview(lessButton)
    
    let numLabel = UILabel(frame: CGRectMake(lessButton.frame.origin.x + lessButton.frame.size.width,lessButton.frame.origin.y,lessButton.frame.size.width * 2,lessButton.frame.size.height))
    (button属性设定,省略)
    numObjectView.addSubview(numLabel)
    
    let moreButton = UIButton(frame: CGRectMake(numLabel.frame.origin.x + numLabel.frame.size.width , 5, lessButton.frame.size.width,lessButton.frame.size.height))
    (button属性设定,省略)
    numObjectView.addSubview(moreButton)

}

之后,我在

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    
    var cell = cartTableViewCell(style: .Default, reuseIdentifier: "Cell")
    let tKey = Data.allKeys[indexPath.row]
    let tValue = Data.objectForKey(tKey) as! NSMutableDictionary
    
    MyFunc.loadImageFromUrl(webImageURL + "product/" + (tValue["photo_m"] as! String), view: cell.mainImageView, Location: "product")
    cell.ProductNameLabel.text = tValue["product_name"] as! String
    cell.ProductPriceLabel.text = "$" + (tValue["price"] as! String)
    let attributedText = NSAttributedString(string: "$" + (tValue["list_price"] as! String), attributes: [NSStrikethroughStyleAttributeName:1])
    cell.tag = CartArray?.objectAtIndex(indexPath.row) as! Int
    cell.ProductListPrictLabel.attributedText = attributedText
    cell.moreButton.addTarget(self, action: Selector("onMoreButtonAction:"), forControlEvents: .TouchUpInside)
    cell.lessButton.addTarget(self, action: Selector("onLessButtonAction:"), forControlEvents: .TouchUpInside)

    cell.selectionStyle = UITableViewCellSelectionStyle.None
    return cell
}

问题在于,如果我按了 indexpath.row == 0 的cell 里面的 「增加数量」的button 触发了 onMoreButtonAction 但我在morebuttonaction 里面,要怎么改变 indexpath.row == 0的 cell 里面的 label 内的内容 呢?

这好像是观念上的问题......

图片描述

1300更新

我现在把 action 写在 uitableviewcell 里

图片描述

可以改变 label了,但,我该怎么样,在改变的同时,改变「同一个画面里的 label 」(已把购物相关资讯,设成全域变量),像 上一个画面的图 ,总金额这种东西,一定是写在 uitableview之外的view 里,这个要怎么写 ....也是观念问题 = =|

回复
阅读 2.6k
2 个回答

看了你的问题,大致我理解为,tableViewCell里的操作如果响应到Controller里。做法有多种,protocol,Closure都能解决你的问题。

比如你可以写一个Cell,里面有个closure传递你的事件,在controller中cellforrowatindexpath时传递你要进行的操作。下面代码swift3例子。有不明白的再问。

class Cell: UITableViewCell{


var closure: ((Int)->Void)?

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)
    
    let button = UIButton()
    button.tag = 0
    button.addTarget(self, action: Selector(("action:")), for: .touchUpInside)
    contentView.addSubview(button)
    
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

func action(button: UIButton){
    closure?(button.tag)
}
 }

class Controller: UITableViewController{


var label: UILabel?

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! Cell
    cell.closure = { [unowned self] i in
        //做你的controller事件
        self.label?.text = "\(i)"
    }
    return cell
}
 }
宣传栏