我的目标是使用“添加更多”按钮在底部重复该视图
在数据插入结束时,当用户按下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")
}
如何正确显示数据?
答案 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))