Создать динамический просмотр коллекции в одном viewcontroller - PullRequest
0 голосов
/ 07 января 2019

enter image description hereenter image description here "Я новичок в разработке для iOS, сейчас я работаю над представлением коллекции. Всякий раз, когда появляется представление, я загружаю данные с данным массивом, затем если пользователь снова выбрал ячейку, я хочу снова загрузить другие данные, если в массиве нет дочерних элементов, которые я хочу загрузить предыдущие данные, все это должно происходить в одном контроллере. Дочерними данными могут быть n чисел данных. есть JSON, как это "

func numberOfSections (в collectionView: UICollectionView) -> Int { возврат 1 }

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return item.count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellIdentifier, for: indexPath) as! ProofAddressCell
    cell.nameLabel.text = item[indexPath.row]["address_title"] as? String
    return cell
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

 if let childItem = item[indexPath.row]["child"] as? [[String: AnyObject]]  {
        if childItem.count > 1 {
        item = childItem
            let addItems: [[String: AnyObject]]!
           // addItems.append(item)
        collectionView.reloadData()
        }
        else {
             print("There is no option to show")
            let alert = UIAlertController(title: "Welcome", message: "No child available", preferredStyle: .alert)
            alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
            self.present(alert, animated: true, completion:{ () in

                self.moveBack()

            })
        }
    }
    else {
    print("There is no option to show")
    let alert = UIAlertController(title: "Welcome", message: "No child available", preferredStyle: .alert)
    alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
    self.present(alert, animated: true, completion:{ () in

        self.moveBack()

    })
    }
}

func moveBack() {
    print("have to move back")
    //item = childArray
}

Когда появляется вид, я загружал заголовок и подзаголовок данных как «Домой» и «Фирма» Когда нажата кнопка «Домой», я хочу загрузить «Домашний ребенок 1» и «Домашний ребенок 2», если пользователь снова щелкает ячейку «Домашний ребенок 1», и я хочу загрузить следующего ребенка, если у ребенка есть значение.

Пожалуйста, подскажите, как это реализовать?

1 Ответ

0 голосов
/ 07 января 2019

Сначала вы хотите использовать декодер

struct Root: Codable {
    let captureMethod, addressTitle, addressSubtitle: String
    let addressRequired: Int
    let poafilename: String
    let child: [Root]
}

let decoder =  JSONDecoder() 
decoder.keyDecodingStrategy = .convertFromSnakeCase
let res = decoder.decode(Root.self,from:data)
item.append(res)

Во-вторых, вам нужно сохранить стек предыдущего пути

var myStack = [[Root]]()
var item = [Root]()


if item[indexPath.row].child.count > 1  {
  myStack.append(item)
  item = item[indexPath.row].child
}
else {
  print("No more childs")
}

Когда вы хотите вернуться назад

if let las = myStack.last  {
  myStack = Array(myStack.dropLast())
  item = las
}
else {
  print("No more prevs")
}
...