Swift 3 - 如何在自定义Tabbar中使用JSON数组?

问题描述:

我在iOS开发中更新鲜。我使用Tabman作为布局的标签。我想用我的json数组填充tabbar项目。Swift 3 - 如何在自定义Tabbar中使用JSON数组?

的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" 
    } 
] 

我想用“DayDescrList的 'DaySeq' 作为我的TabBar项目。 我正在使用Alamofire和SwiftyJSON。

我试图在代码: -

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 

} 

viewDidLoad()方法

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

请帮我

+0

问题在哪里?有些东西无法正常工作,或者在收到JSON之后不知道下一步是什么? – Woof

+0

@Woof yaa我不知道接收到JSON后的下一步操作 –

+0

当你的arrRes确实设置了URL的值,并且你确定里面的数据是正确的(打印可以肯定),你需要重新加载视图控制器通过调用func viewControllers(forPageboyViewController pageboyViewController:PageboyViewController) - > [UIViewController]?当您为Tabbar设置viewControllers var时,我没有看到代码 – Woof

仍然没有足够的代码让您如何使用数据源,但无论如何

我们需要在收到新数据后立即重新加载标签:

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() 
    } 
} 

如果方法viewControllers(forPageboyViewController pageboyViewController:PageboyViewController)使用作为数据SOURSE,只需添加reloadPages()的alamofire完成内,你不需要添加任何其他代码:

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() 
       } 
      } 
     } 

    }) 
}