我想在UIlabel上显示值。当我按下UIbutton来增加或减少标签上的值时。这是我的代码,当我运行我的项目时,但我的uilabel没有任何价值。
@IBAction func btnIncreaseAction(_ sender: Any) {
var count = 0
count = (count + 1)
if let cell = (sender as? UIButton)?.superview?.superview?.superview as? ShoppingCell
{
//cell.lblForOnty.text = "\(cell.lblForOnty.text ?? 0 + 1)"
cell.lblForOnty.text = String(count)
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CellRID") as! ShoppingCell
var someValue: Int = 0 {
didSet {
cell.lblForOnty.text = "\(count)"
}
}
return cell
}
}
答案 0 :(得分:1)
将变量移动到函数外部 增加/减少函数内的计数并重新加载表,或者也可以重新加载特定的索引。 PFB代码被剪掉
let indexPath = NSIndexPath(forRow: rowNumber, inSection: 0)
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Top)
答案 1 :(得分:1)
这是应该放在您的ViewController
中的代码。我假设numberOfSections
为1,并且在numberOfRowsInSection
中传递的是所需的行数。否则,您需要修改以下行:let indexPath = IndexPath(row: sender.tag, section: 0)
。
var count = 0 // Count variable should be a global variable, you need it to decrease the value too.
@objc func increaseCounter(sender: UIButton) {
//increase logic here
count = (count + 1)
let indexPath = IndexPath(row: sender.tag, section: 0)
let cell = tableView.cellForRow(at: indexPath)
cell.lblForOnty.text = "\(count)"
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CellRID") as! ShoppingCell
// Add tag and action to your button
cell.yourButton.tag = indexPath.row
cell.yourButton.addTarget(self, action: #selector(increaseCounter(sender:)), for: .touchUpInside)
return cell
}
答案 2 :(得分:0)
superview?.superview?.superview
很奇怪。不要那样做回调更可靠。
在子类ShoppingCell
中创建一个回调,并在IBAction
中创建in和reduce。将动作连接到按钮
class ShoppingCell: UITableViewCell {
@IBOutlet weak var lblForOnty: UILabel!
var callback : ((Int)->())?
var counter = 0 {
didSet {
lblForOnty.text = "\(count)"
}
}
@IBAction func btnIncreaseAction(_ sender: UIButton) {
counter += 1
callback?(counter)
}
@IBAction func btnDecreaseAction(_ sender: UIButton) {
if counter > 0 { counter -= 1 }
callback?(counter)
}
}
在cellForRow
中,将counter
的值传递到单元格,并使用回调更新由dataSource
表示的模型,该模型是包含属性{{的自定义结构或类1}}。
counter
没有超级视图和索引路径的麻烦。
答案 3 :(得分:0)
请按照以下步骤操作:
第1步:
创建对象类
class QuantityBO : NSObject{
var quantity : Int?
}
步骤2: 在您的课程中创建全局数组
var arrQuantityList = [QuantityBO]()
第3步:
根据您的单元格数量分配值
可能会根据您的api共振而改变
第4步:
在cellForRowAt方法中,请输入:
cell.lblQuantity.text = String(arrQuantityList[indexPath.row].quantity)
cell.yourBtnName.tag = indexPath.row
第5步:
按按钮操作
arrQuantityList[sender.tag].quantity = arrQuantityList[sender.tag].quantity + 1
let indexPath = NSIndexPath(forRow: sender.tag, inSection: 0)
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.none)
这可能对您有所帮助。谢谢