gpt4 book ai didi

swift - UITableViewCell 按钮和分段控件

转载 作者:行者123 更新时间:2023-11-30 12:02:02 24 4
gpt4 key购买 nike

我有一个 UITableView,带有针对人和动物的分段控件。第 1 段加载人,第 2 段加载动物。

在每个单元格内我都有一个添加按钮,应该分别添加人和动物。

@objc func addPerson(_ sender: UIButton){
let buttonTag = sender.tag
let point = sender.convert(CGPoint.zero, to: someTableView as UIView)
let indexPath: IndexPath! = someTableView.indexPathForRow(at: point)
let object = peopleArray[indexPath.row]
print(“person added“)
}


@objc func addAnimal(_ sender: UIButton){
let buttonTag = sender.tag
let point = sender.convert(CGPoint.zero, to: someTableView as UIView)
let indexPath: IndexPath! = someTableView.indexPathForRow(at: point)
let object = animalsArray[indexPath.row]
print(“animal added”)

}

func tableView(_ tableView:UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = someTableView.dequeueReusableCell(withIdentifier: “SomeTableViewCell") as? SomeTableViewCell else { return UITableViewCell() }

switch segmentedControl.selectedSegmentIndex {
case 0:
let object = peopleArray[indexPath.row]


cell.configureCell(//load some data)
cell.add.tag=2
cell.add.addTarget(self, action:#selector(self.addPerson(_:)), for: .touchUpInside)


case 1:
let object = animalsArray[indexPath.row]


cell.configureCell(//some details)
cell.add.tag=3
cell.add.addTarget(self, action:#selector(self.addAnimal(_:)), for: .touchUpInside)

default:
break
}


return cell

}

@IBAction func segmentedTapped(_ sender: Any) {
someTableView.reloadData()
}

在 UITableViewCell 内,我设置了添加按钮,如下所示

@IBOutlet weak var add:UIButton!

当 View 加载并且我按“添加”按钮时,它会打印“已添加人员”,

如果我点击动物分段控件,它会加载动物,如果我点击添加动物,它会打印“已添加人员”“已添加动物”

如果我回到“人物”并按“添加人物”,它会打印“添加人物”“添加动物”。

为什么会发生这种情况?所需的行为是,当点击人员单元格内的添加来打印“添加了人”时,以及当点击动物单元格内的添加来打印“添加了动物”时

最佳答案

Why is this happening?

因为正在让它发生

请记住,单元格是可以重复使用的。因此这个add按钮可能已经存在于以前使用过的单元格中。在您的 cellForRowAt 中,您所说的 cell.add.addTarget(action:for:) 没有删除任何现有目标操作对>add 可能已经了。因此,您只需不断为 add 按钮堆积目标操作对。因此,单击add 按钮即可完成所有操作。

基本上你的整个架构都是不可取的。最好用两个不同的重复使用标识符来区分两种不同的细胞类型,这样用于动物的细胞就不会被重复用于人类。但即便如此,您也必须小心,不要将相同的目标操作对添加两次(或更多次),因为这会导致按下按钮两次(或更多次)调用您的操作方法。

关于swift - UITableViewCell 按钮和分段控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47099482/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com