2016-11-10 71 views
0

我有一个表格视图,并且在每个单元格中我都有X用于删除特定单元格的按钮。所以我已经完成了按钮的iboutlet到我的自定义表格视图单元格。并且在索引路径的单元格行中,我已经将添加目标添加到了我的按钮中。但是当我按下我的表格视图单元格中的按钮时。应用崩溃。如果我把braepoint。它显示在目标添加的代码行中。在uitableview单元格中执行动作按钮以执行删除功能

这里我的代码:

func followButton(sender: AnyObject) { 


     if let button = sender as? UIButton { 
      print("Button Clicked: \(button.tag)") 
      let item = Addtocartdata[button.tag] 
      print("name: \(item.cartid!)") 

      let headers = [ 
       "cache-control": "no-cache", 
       "postman-token": "4c933910-0da0-b199-257b-28fb0b5a89ec" 
      ] 

      let jsonObj:Dictionary<String, Any> = [ 
       "cartID" : "\(item.cartid!)", 
       "cartType" : "3" 
      ] 


      if (!JSONSerialization.isValidJSONObject(jsonObj)) { 
       print("is not a valid json object") 
       return 
      } 

      if let postData = try? JSONSerialization.data(withJSONObject: jsonObj, options: JSONSerialization.WritingOptions.prettyPrinted) { 
       let request = NSMutableURLRequest(url: NSURL(string: "http://exp.Cart.php")! as URL, 
                cachePolicy: .useProtocolCachePolicy,timeoutInterval: 10.0) 
       request.httpMethod = "POST" 
       request.allHTTPHeaderFields = headers 
       request.httpBody = postData 

       let session = URLSession.shared 
       let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in 
        if (error != nil) { 
         ///print(error) 
        } else { 

         DispatchQueue.main.async(execute: { 

          if let json = (try? JSONSerialization.jsonObject(with: data!, options: [])) as? Dictionary<String,AnyObject> 
          { 
           let status = json["status"] as? Int; 

           if(status == 1) 
           { 

            // self.tableView.reloadData() 
            print("items deleted") 
            self.tableView.reloadData() 


           } 

          } 
         }) 
        } 
       }) 

       dataTask.resume() 
      } 


     } 

    } 

回答

2

在斯威夫特3,action“SA参数是选择器,语法是#selector(method-signature)。所以最后的代码是:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "cartcel", for: indexPath) as! cartTableViewCell 
    cell.deleteButton.tag = indexPath.row; 
    cell.deleteButton.addTarget(self, action: #selector(followButton(sender:)), for: .touchUpInside) 

    return cell; 
} 

为您额外的问题:

我需要得到每个单元格的值,我需要作为参数传递 一个API调用。所以如果它不是马赫。那我怎么做 选择器。要执行删除功能

func followButton(sender: AnyObject) { 
    if let button = sender as? UIButton { 
     print("Button Clicked: \(button.tag)") 
     let item = Addtocartdata[button.tag] 
     print("name: \(item.cartproName), quality: \(item.proqty), price: \(item.cartproPrice)") 
    } 
} 
+1

请不要只是发布代码作为答案。一个好的答案解释了什么是错的,并解释了答案如何解决问题。 – rmaddy

+0

@Danh Huyng我正在找索引路径。很好。但是我怎样才能获得细胞的价值? – mack

+0

说的像,我有名字,价格,每个细胞的数量。当我按下任何单元格的“X”按钮。我如何获得特定单元格值的值 – mack

3

从swift2.2或更高的语法添加选择改变时,你必须添加目标这样

cell.deleteButton.addTarget(self, action:#selector(followButton(sender:)), for: .touchUpInside) 

这是你会怎么弄该小区的indexpath,与indexpath你可以做其他

func followButton(sender: UIButton!) { 
    let point : CGPoint = sender.convert(CGPoint.zero, to:collectionView) 
    let indexPath = collectionView.indexPathForItem(at: point) 
    // here is your index path 
} 
+0

OK..will检查出来。但是,你能告诉我,我怎么能得到每个细胞值的细节。在我的单元格中,我有姓名,金额,数量。所以我需要将这些参数传递给我的API调用来执行删除功能。所以当我按下任何单元格按钮时。我怎样才能得到特定的单元格细节或值? – mack

+1

此选择器不正确。它没有考虑'followButton(sender:)'函数的参数。 – rmaddy

+0

@rmaddy我叮嘱你。我需要获取每个单元格的值,并且需要将其作为参数传递给一个api调用。所以如果它不是马赫。那我怎么做选择器。要执行删除功能 – mack