Нажав кнопку отмены в ячейке, чтобы удалить эту ячейку, а также удалить ячейку методом editActionsForRowAt - PullRequest
2 голосов
/ 08 апреля 2019

При использовании UITableView метода редактирования он работает нормально, но при использовании UIButton он не работает.

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
    let deleteAction = UITableViewRowAction(style: .normal, title: "Delete") { (deleteAction, indexPath) in
        deleteApm(Id: myString)
        self.AArrayList.remove(at: indexPath.row)
        tableView.deleteRows(at: [indexPath], with: .fade)
    }
    return [deleteAction]
}

func deleteApm(Id:String)
{
    //...................................
}

@IBAction func myButt(_ sender: UIButton) {
    let cancelBtn = sender.tag
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
    let cell = tableView.dequeueReusableCell(withIdentifier: "ACell", for: indexPath) as! ATableViewCell
    cell.cancelBtn.addTarget(self, action: #selector(self.myButt(_:)), for: .touchUpInside)
    return cell
}

Используя это, я вызвал тот же метод удаления в кнопке, но удаление не работает, используя UIButton. используя UITableView работает нормально ...

Ответы [ 2 ]

2 голосов
/ 08 апреля 2019

добавьте тег для вашей кнопки в cellforRow, чтобы определить строку или конкретный объект

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
    let cell = tableView.dequeueReusableCell(withIdentifier: "ACell", for: indexPath) as! ATableViewCell
     cell.cancelBtn.tag = indexPath.row
     cell.cancelBtn.addTarget(self, action: #selector(self.myButt(_:)), for: .touchUpInside)
 }

, а также обработать действие как

@IBAction func myButt(_ sender: UIButton) {
    let indexPath: IndexPath = IndexPath(row: sender.tag, section: 0)
    deleteApm( currentIndexpath: indexPath)

}

как в deleteRow при вызове

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
    let deleteAction = UITableViewRowAction(style: .normal, title: "Delete") { (deleteAction, indexPath) in
        self.deleteApm(currentIndexpath: indexPath)           
    }
    return [deleteAction]
}

, наконец, создать общий метод для удаления вызова API

func deleteApm(currentIndexpath: IndexPath )    {
    let jsonDict = self.ArrayList[currentIndexpath.row] as? [String:Any]
    let Id:Int = jsonDict?["appointId"] as! Int
    let Id2 : Int = jsonDict?["appointId"] as! Int
    let param : [String : String] = ["pid": {String(Id2)}()]
    let headers = ["Content-Type": "application/x-www-form-urlencoded"]
    // "http://192.168.1.45:8080/zybrodental/patientApp/patientAppDeleteMultipleAppointment"

    Alamofire.request(APIMetadata.URL_DELETE_APPOINT, method: .post, parameters: param, encoding: URLEncoding.httpBody, headers: headers).responseJSON { (response:DataResponse<Any>) in

        switch(response.result) {
        case.success(let data):
            print("success",data)
             self.ArrayList.remove(at: currentIndexpath.row)
             self.yourtableViewName.deleteRows(at: [currentIndexpath], with: .fade)

        case.failure(let error):
            print("Not Success",error)
        }
    }
}
0 голосов
/ 08 апреля 2019

Прежде всего, вы используете Sender.tag в функции myButt(_ sender: UIButton), затем вам нужно назначить этот тег из cellForRowAt метода tableView.Пожалуйста, используйте этот cellForRowAt метод.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
     let cell = tableView.dequeueReusableCell(withIdentifier: "ACell", for: indexPath) as? ATableViewCell
     cell?.lblText.text = "\(arrIndex[indexPath.row])"
     cell?.btnDelete.tag = indexPath.row
     cell?.btnDelete.addTarget(self, action: #selector(self.myButt(_:)), for: .touchUpInside)

     return cell ?? UITableViewCell()
}

Если вы хотите удалить определенную ячейку при событии действия кнопки удаления, используйте это

@IBAction func myButt(_ sender: UIButton) {
    let cancelBtn = sender.tag
    let indexPath = IndexPath(row: arrIndex.index(where: {$0 == "\(cancelBtn)"}) ?? 0, section: 0)
    self.arrIndex.remove(at: sender.tag)
    tableView.deleteRows(at: [indexPath], with: .fade)
    tableView.reloadData()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...