我是Swift的新手,所以请详细说明你的答案。
基本上我使用nib创建了一个自定义标头,并创建了一个与我创建的nib相关联的UITableViewHeaderFooterView
子类。自定义标题包含两个按钮,其中一个是“添加对象”,当用户点击它时,它应该只插入一个自定义单元格(是。我的单元格是应用程序启动时动态显示的自定义单元格)行,包含一些默认数据和另一个是“删除对象”,它启用编辑模式并允许用户删除行。它还包含一个标签,用于显示该节标题的标题。
我不想使用导航控件或以编程方式创建我的按钮,所以我只是在任何人给我这样的答案之前提及它。我将准确解释我所做的和我想要做的事情。
我遇到的问题是每当我点击“删除对象”时,它会启用编辑模式并显示红色圆圈,但显示所有部分。我只希望它显示我点击它的部分。我已经尝试使用canEditRowAt,它似乎不起作用。我一直遇到的问题是,无论在哪个部分点击“删除对象”,它都会将红色圆圈显示为一个部分。
func tableView(_ tableView: UITableView, commit editingStyle:
UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
//There are two sections
switch indexPath.section {
case 0:
if editingStyle == .delete{
//Updating data model before removing
firstArray.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .left)
}
else if editingStyle == .insert{
firstArray.append(objects(name: "Test", second: "Cell", image: UIImage(named: "Unknown")!))
let indexPath = IndexPath(row: firstArray.count - 1, section: 0)
tableView.insertRows(at: [indexPath], with: .left)
}
case 1:
if editingStyle == .delete{
//Updating data model before removing
secondArray.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .left)
}
else if editingStyle == .insert{
let indexPath = IndexPath(row: secondArray.count - 1, section: 0)
tableView.insertRows(at: [indexPath], with: .left)
}
default:
break
}
}
对于笔尖内的按钮,我做了类似于从viewController中放松的方法。我在firstViewController(它是TableView的数据源和委托)中创建了@IBAction出口,并在nib中控制+单击每个按钮并将该行拖到firstResponder框并将其分配给我创建的事件。我测试了它们并且它们有效。
@IBAction func deleteTheObject(sender: UIButton){
//This does show the edit mode and changes the buttons name each time
//it's clicked, but I only want it to enable the edit mode on the
// section that the section's header "Delete Object" button was clicked on.
//NOT both sections
if self.table.isEditing == true{
table.setEditing(!table.isEditing, animated: true)
sender.setTitle("Done", for: .normal)
}
else{
self.table.isEditing = true
sender.setTitle("Delete Object", for: .normal)
}
}
@IBAction func addTheObject(sender: UIButton){
//Should add row to section
}
答案 0 :(得分:0)
将此添加到仅允许,例如section1,editable
override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
if indexPath.section == 1 {
return true
}
return false
}