Swift:自定义节标题包括用于删除行或仅为该节的行添加行的按钮

时间:2017-09-03 03:22:31

标签: ios swift uitableview

我是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
}

1 个答案:

答案 0 :(得分:0)

将此添加到仅允许,例如section1,editable

    override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
        if indexPath.section == 1 {
            return true
        }
        return false
    }