我在UITableViewCell中有一个复选框(UIButton)和一个标签。我想在单击复选框时更改标签的文本(颜色+删除线)。
这是针对配方应用程序的。在完成烹饪步骤后,用户可以“检查”完成。
这是tableView的当前cellForRowAt函数:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 3
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if tableView == groceryTableView {
let cell = tableView.dequeueReusableCell(withIdentifier: groceryTableViewCell, for: indexPath) as! GroceryItemTableViewCell
cell.amoutLabel.text = indexPath.item % 2 == 0 ? "50 g" : "500 ml"
cell.itemLabel.text = indexPath.item % 2 == 0 ? "Cheese" : "Milk"
cell.selectionStyle = .none
return cell
}
else {
let cell = tableView.dequeueReusableCell(withIdentifier: cookingStepTableViewCell, for: indexPath) as! CookingStepTableViewCell
cell.cookingStepDescription.text = indexPath.item % 2 == 0 ? "Test 123..." : "Test 321..."
cell.selectionStyle = .none
cell.delegate = self
return cell
}
}
这是我的Button addTarget函数,它从TableViewCell类委托给实际的ViewController类:
func cookingStepDone(description: String, isDone: Bool) {
// if isDone == true
// label textcolor is gray + strikethrough
// if isDone == false
// no change...
}
如果“ isDone”为true,我希望更改cell.cookingStepDescription标签(=单击复选框)
答案 0 :(得分:1)
假定按钮出口位于单元格类中。因此,请在cellForRowAtIndexpath中声明一个操作方法,即像这样。
cell.yourDoneBtn?.addTarget(self, action: #selector(self.cookingStepDone), for: .touchUpInside)
现在在您的动作功能中:
@objc func cookingStepDone(sender: UIButton)
{
let location = self.yourTableViewName?.convert(sender.bounds.origin, from:sender)
let indexPath = self.yourTableViewName?.indexPathForRow(at: location!)
if let cell = self.yourTableViewName.cellForRow(at: indexPath!) as? yourTableViewCell // i.e groceryTableViewCell or CookingStepTableViewCell
{
if isDone == true
{
// Set your cell label textcolor to gray + strikethrough
}
else
{
// no change
}
}
DispatchQueue.main.async
{
self.yourTableView.reloadData() // reload your table view
}
}
在需要的地方设置bool值。
答案 1 :(得分:0)
您可以使用以下方法进行操作
定义一个数组,在您的CookingStepDone方法中将indexPath
添加到该数组中,如果Array中已存在indexPath,则将其删除并重新加载tableView。然后在cellForRowAtIndexpath
方法中,检查Array是否包含indexPath
。如果包含make文本strikeThrough,则使正常。
答案 2 :(得分:0)
如果您创建一个新类,该类的超类将是UITableViewCell,然后在该类中添加@IBOutlets(UIButton和UILabel)和@IBAction(buttonWasTapped),怎么办?
类似的东西
class RecipeTableViewCell: UITableViewCell {
@IBOutlet var myButton : UIButton!
@IBOutlet var myLabel : UILabel!
@IBAction func didTouchButton(sender : UIButton)
{
myLabel.textColor = UIColor.green;
}
}
答案 3 :(得分:0)
签出此代码: RecipeTableViewCell
class RecipeTableViewCell: UITableViewCell {
@IBOutlet var myButton : UIButton!
@IBOutlet var myLabel : UILabel!
var buttonClick : (() -> Void)? = nil
override func awakeFromNib() {
myButton.addTarget(self, action: #selector(didTouchButton(sender:)), for: .touchUpInside)
}
@IBAction func didTouchButton(sender : UIButton)
{
if let action = buttonClick {
action()
}
}
}
在 cellForRowAt
中let cell = tableView.dequeueReusableCell...
// Your code ...
cell.buttonClick = {
//access your label and data from here
cell.yourLbl.text = yourModel[indexPath.row].text
}