2017-09-28 8 views
0

Je suis plus frais dans le développement d'iOS. J'emploie Tabman pour la disposition semblable d'étiquette. Je veux remplir des articles de tabbar avec mon tableau de json.Swift 3 - Comment utiliser JSON Array dans un Tabbar personnalisé?

mon JSON: -

{ 
"ManagerName": null, 
"ManagerCellNo": null, 
"DayDescrList": [ 
    { 
     "DaySeq": 1, 
     "Descr": "Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda. ", 
     "DescrSeq": 1, 
     "HotelId": 1, 
     "HotelNm": "ABC" 
    }, 
    { 
     "DaySeq": 2, 
     "Descr": "Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.", 
     "DescrSeq": 1, 
     "HotelId": 1, 
     "HotelNm": "ABC" 
    }, 
    { 
     "DaySeq": 3, 
     "Descr": "Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.", 
     "DescrSeq": 1, 
     "HotelId": 2, 
     "HotelNm": "ABC" 
    }, 
    { 
     "DaySeq": 4, 
     "Descr": "Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.", 
     "DescrSeq": 1, 
     "HotelId": 3, 
     "HotelNm": "ABC" 
    } 
] 

Je veux utiliser DaySeq ' « de DayDescrList' que mes articles TabBar. J'utilise Alamofire et SwiftyJSON.

ce que je suis en train de code: -

func alamoget() { 

    Alamofire.request("URL").responseJSON(completionHandler: { (responseData) in 

     if ((responseData.result.value) != nil) { 

      let swiftyJSONVar = JSON(responseData.result.value!) 
      if let resData = swiftyJSONVar["DayDescrList"].arrayObject { 
       self.arrRes = resData as! [[String:AnyObject]] 
      } 
     } 

    }) 
} 
func viewControllers(forPageboyViewController pageboyViewController: PageboyViewController) -> [UIViewController]? { 
    let storyboard = UIStoryboard(name:"Main",bundle:Bundle.main) 
    var dict = arrRes[(targetIndex)!] 
    var viewControllers = [UIViewController]() 
    var tabBarItems : [TabmanBar.Item] = [] 
    for i in 0 ..< dict["DaySeq"] { 
     let vc = storyboard.instantiateViewController(withIdentifier: "childvc") as! childvc 
     vc.index = i+1 

     tabBarItems.append(Item(title: String(format: "Day %i",vc.index!))) 
     viewControllers.append(vc) 
    } 
    self.bar.items = tabBarItems 
    return viewControllers 

} 

Mon viewDidLoad() Méthode

override func viewDidLoad() { 
    super.viewDidLoad() 
    alamoget() 
    self.dataSource = self 
    self.bar.location = .top 
} 

S'il vous plaît Aidez-moi

+0

Et où est le problème? Quelque chose ne fonctionne pas ou vous ne connaissez pas les prochaines étapes après avoir reçu le JSON? – Woof

+0

@Woof yaa je ne connais pas les étapes suivantes après avoir reçu le JSON –

+0

Lorsque vos arrRes ont défini avec des valeurs de l'URL et que vous êtes sûr que les données sont correctes (impression pour être sûr), vous devez recharger les contrôleurs de vue en appelant func viewControllers (pourPageboyViewController pageboyViewController: PageboyViewController) -> [UIViewController]? Je ne vois pas le code lorsque vous définissez viewControllers var pour Tabbar – Woof

Répondre

1

Pas encore assez de code pour obtenir la façon dont vous utilisez la source de données, mais

Nous devons recharger les onglets juste après les nouvelles données reçues:

var arrRes: [[String:AnyObject]] = [] { 
    didSet{ 
     reloadTabs() 
    } 
} 

func reloadTabs(){ 
    //if you have an additionl datasource array, we will prepare a new 
    guard let controllers = viewControllers(forPageboyViewController: YourPageboyViewController) else{ 
     return 
    } 

    //then we need to reload bars in the main queue 
    DispatchQueue.main.async{ [weak self] in 
     self?.reloadPages() 
    } 
} 

Si la méthode viewControllers (forPageboyViewController pageboyViewController: PageboyViewController) utilise comme sourse de données, il suffit d'ajouter reloadPages() à l'intérieur de l'achèvement de alamofire et vous n'avez pas besoin d'ajouter tout autre code:

func alamoget() { 

    Alamofire.request("URL").responseJSON(completionHandler: { (responseData) in 

     if ((responseData.result.value) != nil) { 

      let swiftyJSONVar = JSON(responseData.result.value!) 
      if let resData = swiftyJSONVar["DayDescrList"].arrayObject { 
       self.arrRes = resData as! [[String:AnyObject]] 
       DispatchQueue.main.async{ [weak self] in 
        self.reloadPages() 
       } 
      } 
     } 

    }) 
}