在 swift 中解析时无法在 json post 请求参数中添加文本字段输入的文本

Unable to add textfield entered text in json post request parameter while parsing in swift

最初我从之前的 viewcontroller 获取文本字段文本,以了解要在当前视图控制器中添加哪些文本。如果我点击文本字段,以前的文本将是空的,我正在添加文本,但我无法添加当前视图控制器 post 参数的文本。这里我也得到以前的视图控制器文本。

这是我的代码:

 @IBOutlet weak var tableView: UITableView!

var cell : BillerTableViewCell?
var textFieldArray = [String]()
var selectedBiller: JsonDataBiller?
var toplabeText: String?

var textFieldValue: String?
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        cell = tableView.dequeueReusableCell(withIdentifier: "textfieldCell", for: indexPath) as! BillerTableViewCell

        cell?.searchTextfield.delegate = self

        if let param = selectedBiller?.bcustomerparms[indexPath.row] {
            cell?.searchTextfield.text = param.paramName
            textFieldValue = cell?.searchTextfield.text
        } else {
            cell?.searchTextfield.text = "missing data"
        }

    return cell!
}

func textFieldDidBeginEditing(_ textField: UITextField) {
    textField.text = ""
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    textField.resignFirstResponder()
    return true
}
@objc func buttonClicked(sender: UIButton) {
    billerFetchService()
}

func billerFetchService(){


    print("fetch paramname \(textFieldKey)")
    // var textFieldValue: String = (cell?.searchTextfield.text)!


    let parameters = ["billDetails": [
        "billerId" : "EPDCLOB00ANP01",
        "customerParams" : [["name": textFieldKey,"value": textFieldValue]]]] as [String : Any]

    print("the textfield value is  \(textFieldValue)")
    let url = URL(string: "https://app.com/emi_v1/fetch")
    var req =  URLRequest(url: url!)
    req.httpMethod = "POST"
    req.addValue("application/json", forHTTPHeaderField: "Contet-Type")
    req.addValue("application/json", forHTTPHeaderField: "Accept")

    guard let httpBody = try? JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted) else {return}
    req.httpBody = httpBody
    let session = URLSession.shared
    session.dataTask(with: req, completionHandler: {(data, response, error) in
        if response != nil {
            // print(response)
        }
        if let data = data {
            do{
                var json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as! [String: Any]
                // print("fetching json \(json)")
                let fetchStatus = json["status"] as? String

                if fetchStatus == "sucess"{
                    let billerDetails = json["response"] as! [String:Any]
                    let value = billerDetails["billerResponse"] as! String
                    print(value)

                    let res = try JSONSerialization.jsonObject(with:Data(value.utf8)) as! [String: Any]
                    self.billerName = res["billerName"] as? String
                    var consumName = res["customerName"] as? String

                    print("fetch only APEPDCL biller name \(self.billerName)")
                    DispatchQueue.main.async {
                        let nextViewController = self.storyboard?.instantiateViewController(withIdentifier: "FetchBillerViewController") as? FetchBillerViewController
                        nextViewController?.nameText = self.billerName
                        nextViewController?.consumrName = consumName
                        self.navigationController?.pushViewController(nextViewController!, animated: true)
                    }
                }
                else{
                    DispatchQueue.main.async {
                        AlertFun.ShowAlert(title: "", message: "Invalid service Number", in: self)
                    }
                }
            }catch{
                print("error")
            }
        }
    }).resume()
}
}

在您的视图控制器中声明一个变量来存储最终值。

var finalSearchValue : String = ""

现在在你的 cellForRowAtIndexPath 方法中添加这一行:

cell.searchFieldText.addTarget(self, action: #selector(searchEditingChanged(textField:)), for: .editingChanged)

现在在你的视图控制器中声明这个函数:

@objc func searchEditingChanged(textField: UITextField) { 
 finalSearchValue = textField.text!
}

就是这样。您的 finalSearchValue 变量现在包含输入文本。将它用于您的 api 请求。

如果有任何问题,请告诉我。