我一直在和人们一起测试应用程序,在我告诉他们他们可以刷卡删除后,他们发现它很直观但不是每个人 - 至少在我的经验中 - 是足够精明的解决它。
还有其他选择吗?我认为理想情况下我想在tableView单元格上有一个小垃圾桶或“x”,可以按下来删除。但不确定这是否很容易实现。
我遇到的第一个问题是我不认为我可以将IBOutlet
从TableViewCell
拖到我有桌面视图的UIViewController
。
即使可能无法确定在单击删除按钮时如何实现以下功能。
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
所以只是想知道刷卡删除是否是我唯一的选择?
感谢。
答案 0 :(得分:1)
您所描述的内容通常是通过在导航栏的一侧放置“编辑”按钮来实现的。该按钮将表格置于编辑模式,允许点击小的红色删除按钮。只是另一种做同样事情的方法,即删除一行。从iOS模板创建Master-Detail应用程序,并查看如何在viewDidLoad方法中以编程方式创建按钮。然后查看以下处理删除的方法,无论是通过滑动还是编辑按钮启动。
override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
// Return false if you do not want the specified item to be editable.
return true
}
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
objects.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .fade)
} else if editingStyle == .insert {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view.
}
}
答案 1 :(得分:1)
您可以执行此操作以在tableView单元格上实现“x”按钮:
protocol CustomCellDelegate {
func removeButtonTappedOnCell(with indexPath: IndexPath)
}
class CustomCell: UITableViewCell {
var delegate: CustomCellDelegate?
@IBOutlet weak var removeButton: UIButton!
override func awakeFromNib() {
super.awakeFromNib()
}
@IBAction func removeButtonTapped(_ sender: UIButton) {
let indexPath = IndexPath(row: sender.tag, section: 0)
delegate?.removeButtonTappedOnCell(with: indexPath)
}
}
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, CustomCellDelegate {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as! CustomCell
cell.removeButton.tag = indexPath.row
cell.delegate = self
return cell
}
func removeButtonTappedOnCell(with indexPath: IndexPath) {
modelArray.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .right)
}
}