在表格视图中插入和删除单元格,将文本字段放入单元格中,然后将文本字段数据放入swift中的json raw参数

时间:2018-11-05 07:32:35

标签: ios swift

description image

description image

我的目标是使用“添加更多”按钮在底部重复该视图

在数据插入结束时,当用户按下SUBMIT按钮时。我需要阅读所有重复的表格,并将其作为JSONArray发送到API。

我的问题是我无法保持数据一致。例如。如果我放置三个表单并填写数据,则添加更多表单。当我跨过一些表格时,现有表格会更改其原始位置,新表格从顶部移至第二个位置,其余单元格会重新排列。

我希望单元在整个过程中保持其原始位置。无论用户做什么,都不应更改。

当我按下SUBMIT按钮时,我也想读取所有数据。

请帮助!

这是我的JSON原始数据

{
"participants":[

    {
        "name":"Ram",
        "mobile_no":"912368790",
        "events":[6,7,8,9,10],
        "gender":"male",
        "whatsapp_no":"912368790"
    },

    {
        "name":"Sham",
        "mobile_no":"9909123456",
        "events":[9,10],
        "gender":"male",
        "whatsapp_no":"9909123456"
    }

 ]
}

我是swift的新手,能帮助我如何在swift中处理tableview数据和JSON原始数据

class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate {

@IBOutlet weak var addmore: UIButton!
var ar = ["Individual 1"]

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return ar.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableview.dequeueReusableCell(withIdentifier: "cell") as! TableTVC
    cell.indivuallbl.text! = ar[indexPath.row]
    return cell
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 240.5
}

按钮操作

@IBAction func deleterow(_ sender: Any) {

    let point = (sender as AnyObject).convert(CGPoint.zero, to: tableview)
    guard let indexPath = tableview.indexPathForRow(at: point) else {
        return
    }
    ar.remove(at: indexPath.row)
    print(ar.count)

    tableview.deleteRows(at: [indexPath], with:  .automatic)
    self.perform(#selector(reloadTable), with: nil, afterDelay: 0)


}

@objc func reloadTable() {
    DispatchQueue.main.async {
        self.tableview.reloadData()
    }
}

@IBOutlet weak var tableview: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()

    tableview.tableHeaderView = UIView.init(frame: .zero)

}

@IBAction func addmore(_ sender: Any) {


    ar.insert("Individual \(ar.count + 1 )", at: 0)
    print(ar.count)
    tableview.insertRows(at: [IndexPath(row: 0 , section: 0)], with: .automatic)

}

@IBAction func submitBtn(_ sender: Any) {

    NotificationCenter.default.post(name: .data, object: nil)

    }





Uitableviewcell

TableTVC类:UITableViewCell {

@IBOutlet weak var whatsappnotxt: UITextField!
@IBOutlet weak var phonenotxt: UITextField!
@IBOutlet weak var nametxt: UITextField!
@IBOutlet weak var gendropDowntx: HADropDown!
@IBOutlet weak var indivuallbl: UILabel!



override func awakeFromNib() {
    super.awakeFromNib()
 NotificationCenter.default.addObserver(self, selector: 
#selector(datatable(notification:)), name: .data, object: nil

}




@objc func datatable(notification: Notification){




    let pP: [String: Any ] =
[

    "participants":[

        [

            nametxt.text = "\(nametxt!)",
            whatsappnotxt.text! = "\(whatsappnotxt!)",
            phonenotxt.text! = "\(phonenotxt!)"



              ]
    ]


    ]

    let headers: HTTPHeaders = [
        "Authorization": "Bearer\(token)",
        "Accept": "application/json"
    ]


    Alamofire.request("http://api.domain.com/individual/add", method: .post, parameters: pP, encoding: JSONEncoding.default,headers: headers)
        .responseJSON { response in
            print(response)

    }

}

}

扩展名Notification.Name {

static let data = Notification.Name("data")

}

如何正确显示数据?

1 个答案:

答案 0 :(得分:0)

从Alamofire下载JSON数据后,应将其解码为值类型,例如struct。

定义结构

struct Participants: Decodable{
  var participants: [Participant]
 }

 struct Participant: Decodable{

  var name: String
  var mobile_no: String
  var events: [Int]
  var gender: String
  var whatsapp_no: String
 }

解码数据

var trackList: TrackList = JSONDecoder().decode(TrackList.self. init(from: response))