2016-11-10 72 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