Здравствуйте помогите пожалуйста.
Есть два VC, на обоих есть tableView.
Существуют данные в переменной которые приходят с сервера и выглядят они вот так
[[“Address”: “Саранск город,улица,Советская, д.65,п.5”,
“Monitor”: “dc-dgv-34”,
“Data”: “12-03-2017”,][
“Address”: “Ярославль город,улица,Володарского, д.101,п.78”,
“Monitor”: “tg-bur-25”,
“Data”: “24-67-2016”,]]
в первом VC : в табличке я вынимаю только адрес и получается таблица с двумя значениями адрес 1 и адрес 2, мне нужно по нажатию на первый адрес чтобы во втором vc в табличке отобразились данные monitor и data которые принадлежат их адресу , как вот такое сделать
Работа с массивом и tableView
Пример абстрактный
VC1
var data: [Model] = []
prepare() {
if segue.identifier == "Segueidentifier" {
let vc2 = segue.destination as! VC2
vc2.data = sender as! Model
}
}
// tableview datasource
tableView(cellForRowAt) {
let cell = ...
let rowData = data[indexPath.row]
cell.textField.text = rowData.address
return cell
}
// tableview delegate
tableView(didSelectRowAt) {
let rowData = data[indexPath.row]
prepareSegue("Segueidentifier", sender: rowData)
}
VC2
var data: Model!
// tableview datasource
tableView(cellForRowAt) {
let cell = ...
cell.textField1.text = data.monitor
cell.textField2.text = data.date
return cell
}
Ваша модель данных (структура, либо класс в который вы перегоняете json, либо если совсем в лоб, то [String: Any])
Посмотрите библиотеку Alamofire, как там работают с моделями, будет понятнее.
Приходит такой JSON
[
[
“MobilePhone”: “89170684000”,
“Monitor”: “null”,
“Debtor”: “Кв.0056”,
“VideoControl”: “Нет”,
“AndroidKommentariy”: "Cписать: Доводчик Е-603 (1 шт.), \n ПересортСнято: Видеодомофон цвет. PVD-405C (2 шт.), \n ",
“MasterKod”: “13022”,
“PriznakSobytiya1S”: “1”,
“ZnachenieSrochnosty”: “Обычная”,
“DatePodachiZayavki”: “2017-12-20”,
“KodServisnika”: “000004312”,
“DateOtmeny”: “0000-00-00”,
“LoginServisnika”: “null”,
“HarakterZayavki”: “Замена трубки”,
“Neispravnost”: “Трубка. Не проходит звонок в трубку. Одна квартира…”,
“KontaktTelephony”: “null”,
“MasterKod2”: “null”,
“Kvartira”: “56”,
“TimePodachiZayavki”: “13:00:00”,
“Kalitka”: “Нет”,
“FIOzayavitel”: “Абонент”,
“KodZayavki”: “167502”,
“PolnyiKod”: “11418/167502”,
“AddressKommentariy”: “null”
],
[
“MobilePhone”: “null”,
“Monitor”: “null”,
“Debtor”: “null”,
“VideoControl”: “Нет”,
“MasterKod”: “null”,
“PriznakSobytiya1S”: “1”,
“ZnachenieSrochnosty”: “Обычная”,
“DatePodachiZayavki”: “2017-10-27”,
“KodServisnika”: “000004312”,
“DateOtmeny”: “0000-00-00”,
“LoginServisnika”: “null”,
“HarakterZayavki”: “Негарантийный ремонт”,
“Neispravnost”: “Без выбора Сути заявки (подает клиент)”,
“KontaktTelephony”: “null”,
“MasterKod2”: “null”,
“Kvartira”: “0001”,
“TimePodachiZayavki”: “10:00:00”,
“Kalitka”: “Нет”,
“FIOzayavitel”: “Елена”,
“KodZayavki”: “194394”,
“PolnyiKod”: “14405/194394”,
“AddressKommentariy”: “null”
],
[
“MobilePhone”: “89170684000”,
“Monitor”: “null”,
“Debtor”: “Кв.0057”,
“VideoControl”: “Нет”,
“MasterKod”: “13022”,
“PriznakSobytiya1S”: “1”,
“ZnachenieSrochnosty”: “Обычная”,
“DatePodachiZayavki”: “2017-12-21”,
“KodServisnika”: “000004312”,
“DateOtmeny”: “0000-00-00”,
“LoginServisnika”: “null”,
“HarakterZayavki”: “Замена трубки”,
“Neispravnost”: “Трубка. Не проходит звонок в трубку. Одна квартира…”,
“KontaktTelephony”: “null”,
“MasterKod2”: “null”,
“Kvartira”: “57”,
“TimePodachiZayavki”: “13:00:00”,
“Kalitka”: “Нет”,
“FIOzayavitel”: “Абонент”,
“KodZayavki”: “167503”,
“PolnyiKod”: “11418/167503”,
“AddressKommentariy”: “null”
]
]
как сделать, чтобы вот эти данные забить в таблицу у которой название строк вот такое
let interfaceZayavok = [
"Код заявки:",
"Суть заявки:",
"Характер заявки:",
"Квартира:",
"Адресс:",
"Монитор:",
"Должники:",
"Позвонил с номера:",
"Марка домофона:",
"Срочность:",
"Мастер-код 1:",
"Мастер-код 2:",
"Комменатрий к адресу:",
"Контактный телефон:",
"Мобильный телефон:",
"Телефон для СМС:",
"Не абоненты:",
"Обслуживание калитки:",
"Обслуживание ворот:",
"Номер заказа для оплаты на сайте:",
"Дата подачи заявки:"
]
причем нужны не все данные из таблицы, там несколько остается не нужных(они в дальнейшем используются) Помогите пожалуйста!
пока вот так вот, теперь нужно присвоить им свои значения, там получается что до этого окна есть окно с адресами, в данном случае три адреса, при нажатии на конкретный адрес, нужно в это окно вывести те значения которые принадлежат этому адресу, в самом верху посмотрите там я писал об этом
Для начала, у вас есть структура или класс, в который вы парсите свой json, или вы все еще работаете с Dictionary?
я сделал класс, но не понимаю как json в этот класс поместить
class Zayavki: Codable {
let TimeVydachiVrabotu: String
let MasterKodNew: String
let NomerZakaza: String
let Address: String
let Vorota: String
let Raion: String
let TelephoneDlyaSMS: String
let NeAbonenty: String
let SutZayavki: String
let MarkaDomofona: String
let MobilePhone: String
let Monitor: String
let Debtor: String
let MasterKod: String
let ZnachenieSrochnosty: String
let DatePodachiZayavki: String
let HarakterZayavki: String
let KontaktTelephony: String
let MasterKod2: String
let Kvartira: String
let Kalitka: String
let AddressKommentariy: String
zayv.textLabel?.text = addressZayvki[indexPath.row]["Address"]
вот так я вот могу получит в таблицу адреса, их получится три адреса, а как вынуть только конкретную информацию которая принадлежит конкретному адресу, я выше задавал этот вопрос, но может быть еще есть варианты
вот это vc, который принимает ответ json и обрабатывает его вытаскивая из ответа адресс и забивая их в таблицу
` import UIKit`
class ImageViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var tablezayvki: UITableView!
var addressZayvki: [[String:String]]!
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "NaPoleZayavok" {
if let indexPath = self.tablezayvki.indexPathForSelectedRow {
let obrabotkaVC = segue.destination as! Obrabotka
obrabotkaVC.poleObrabotki = addressZayvki
}
}
}
func AddressZayvki() {
for (index,dict) in addressZayvki.enumerated() {
print("\(index+1) \(dict["Address", default: "not"])")
}
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let zayv = tableView.dequeueReusableCell(withIdentifier: "Zayv", for: indexPath)
switch seg.selectedSegmentIndex {
case 0:
zayv.textLabel?.text = addressZayvki[indexPath.row]["Address"]
break
case 1:
zayv.textLabel?.text = MonitorString[indexPath.row]
break
default:
break
}
zayv.textLabel?.numberOfLines = 0
zayv.backgroundColor = .clear
zayv.textLabel?.textColor = .black
return zayv
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
var returnValue = 0
switch seg.selectedSegmentIndex {
case 0:
returnValue = addressZayvki.count
case 1:
returnValue = MonitorString.count
default:
break
}
return returnValue
}
@IBOutlet weak var seg: UISegmentedControl!
let MonitorString:[String] = ["Монитор 1" , "Монитор 2"]
@IBAction func ValueChanged(_ sender: UISegmentedControl) {
tablezayvki.reloadData()
}
@IBOutlet weak var ooo: UITextField!
// var detaiImage: UITextField!
//var modelController: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
AddressZayvki()
}
}
далее второй vc , в который я перехожу после нажатия на один из адресов и должен увидеть все остально связанное конкретно с этим адресом
import UIKit
class Obrabotka: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var tableObrabotka: UITableView!
var poleObrabotki: [[String:String]]!
let spisokZayvki = [
"KodZayavki",
"SutZayavki",
"HarakterZayavki",
"Kvartira",
"Address",
"Monitor",
"Debtor",
"TelephonKlienta",
"MarkaDomofona",
"ZnachenieSrochnosty",
"MasterKod",
"MasterKod2",
"AddressKommentariy",
"KontaktTelephony",
"MobilePhone",
"TelephoneDlyaSMS",
"NeAbonenty",
"Kalitka",
"Vorota",
"NomerZakaza",
"DatePodachiZayavki",
]
let interfaceZayavok = [
"Код заявки:",
"Суть заявки:",
"Характер заявки:",
"Квартира:",
"Адресс:",
"Монитор:",
"Должники:",
"Позвонил с номера:",
"Марка домофона:",
"Срочность:",
"Мастер-код 1:",
"Мастер-код 2:",
"Комменатрий к адресу:",
"Контактный телефон:",
"Мобильный телефон:",
"Телефон для СМС:",
"Не абоненты:",
"Обслуживание калитки:",
"Обслуживание ворот:",
"Номер заказа для оплаты на сайте:",
"Дата подачи заявки:"
]
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return interfaceZayavok.count
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let obrabotkaZayavok = tableView.dequeueReusableCell(withIdentifier: "CellObr", for: indexPath)
obrabotkaZayavok.textLabel?.text = interfaceZayavok[indexPath.row] //poleObrabotki[indexPath.row]["NomerZakaza"]
obrabotkaZayavok.textLabel?.textColor = .black
obrabotkaZayavok.textLabel?.numberOfLines = 0
obrabotkaZayavok.backgroundColor = .clear
return obrabotkaZayavok
}
override func viewDidLoad() {
super.viewDidLoad()
print(poleObrabotki!)
}
}
obrabotkaVC.poleObrabotki = addressZayvki[indexPath.row]
а poleObrabotki должен иметь такой тип [String: String]
судя по вашему коду, да
P.S. установите ObjectMapper, не усложняйте себе и другим жизнь.