当选择类别单元格和存储单元格时,或从上一个控制器中仅一个快速显示数据时,将数据从api显示到tableview中

时间:2019-06-21 14:25:37

标签: swift xcode

我正在创建一个应用程序,其中有一个控制器,其中有一个表格视图,当选择c分类区域中的单元格或存储区域中的单元格或仅选择一个时,将显示上一屏的数据,然后单击应用中显示双箭头按钮,则它应导航到表格视图屏幕,并应将类别或存储中的所有数据或两者都显示到表格视图中。在tableview控制器中,我有一个API,该API为POST,其主体参数为'term_ids',其中包含值556,574,以逗号分隔,表示前一个用于类别,后一个用于存储,或者两个ID都包含类别数据或存储数据。意味着我必须传递两个id并将它们用逗号分隔,然后传递给tableview控制器

在类别屏幕快照中说,我已经选择了前两个单元格,当我点击双箭头按钮时,所选单元格数据应传递到另一个屏幕截图,其屏幕截图如下:

类别数据的

api链接:https://api.myjson.com/bins/wggld 用于存储数据的api链接:https://api.myjson.com/bins/1fc46p 优惠券的api链接,我需要根据类别中的ID填充到tableview中并存储api链接:https://api.myjson.com/bins/1c4dip

screenshot for tableview screen 我的应用屏幕截图,用于更好地理解: screenshot for category screen

我要在其中填充数据的类别屏幕和主主屏幕的

代码如下:

categoryViewController的代码如下:

类别CategoryViewController:UIViewController {

//MARK: IBOutlets
@IBOutlet weak var store_bar: UIViewX!
@IBOutlet weak var store_title: UIButton!
@IBOutlet weak var category_title: UIButton!
@IBOutlet weak var category_bar: UIViewX!
@IBOutlet weak var categoryColView: UICollectionView!

var selectedBtnIndex:Int = 1
var selectedIndexPaths = [Int]()
var tempStoreIndexPaths = [Int]()

var categoryData = [ModelCategories]()
var storeData = [ModelStore]()


var arrCategoryImages = [UIImage]()

override func viewDidLoad() {
    super.viewDidLoad()

    // register collectionview cell
    self.categoryColView.register(UINib(nibName: "CategoryCell1", bundle: nil), forCellWithReuseIdentifier: "CategoryCell1")
    self.categoryColView.register(UINib(nibName: "StoresCell", bundle: nil), forCellWithReuseIdentifier: "StoresCell")

    self.store_bar.isHidden = true

    self.getCategoriesList()
    self.getStoreList()

}

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

@objc func click_Category(sender: UIButton!) {

    if sender.isSelected == true {
        selectedIndexPaths.append(sender.tag)
        sender.setImage(#imageLiteral(resourceName: "image_checked"), for: .normal)
        sender.isSelected = false
    }else {
        selectedIndexPaths = selectedIndexPaths.filter{ $0 != sender.tag }
        sender.setImage(#imageLiteral(resourceName: "image_unchecked"), for: .normal)
        sender.isSelected = true
    }
}

@objc func click_store(sender: UIButton!) {

    if sender.isSelected == true {
        tempStoreIndexPaths.append(sender.tag)
        sender.setImage(#imageLiteral(resourceName: "image_checked"), for: .normal)
        sender.isSelected = false
    }else {
        tempStoreIndexPaths = tempStoreIndexPaths.filter{ $0 != sender.tag }
        sender.setImage(#imageLiteral(resourceName: "image_unchecked"), for: .normal)
        sender.isSelected = true
    }
}


//MARK: IBActions

@IBAction func categoriesData(_ sender: UIButton) {

    selectedBtnIndex = 1
    self.categoryColView.isHidden = false
    self.store_bar.isHidden = true
    self.category_title.setTitleColor(UIColor.black, for: .normal)
    self.category_bar.isHidden = false
    self.store_title.setTitleColor(UIColor(rgb: 0xAAAAAA), for: .normal)
    self.categoryColView.reloadData()
}

@IBAction func storeData(_ sender: UIButton) {

    selectedBtnIndex = 2
    self.categoryColView.isHidden = false
    self.store_bar.isHidden = false
    self.store_title.setTitleColor(UIColor.black, for: .normal)
    self.category_bar.isHidden = true
    self.category_title.setTitleColor(UIColor(rgb: 0xAAAAAA), for: .normal)
    self.categoryColView.reloadData()

}

@IBAction func showHomeScreen(_ sender: UIButton) {
    let vc = self.storyboard?.instantiateViewController(withIdentifier: "HomeViewController") as! HomeViewController
    if selectedBtnIndex == 1 {
      vc.couponId = categoryData[sender.tag].ID!
    }else {
        vc.couponId = storeData[sender.tag].ID!
    }

    self.navigationController?.pushViewController(vc, animated:true)
}

@IBAction func toSearchPage(_ sender: UIButton) {
    let vc = self.storyboard?.instantiateViewController(withIdentifier: "SearchPageController") as! SearchPageController
    self.navigationController?.pushViewController(vc, animated:true)
}

func getCategoriesList() {
    if ApiUtillity.sharedInstance.isReachable() {

        ApiUtillity.sharedInstance.StartProgress(view: self.view)

        APIClient<ModelBaseCategoryList>().API_GET(Url: SD_GET_CategoriesList, Params: [:], Authentication: true, Progress: true, Alert: true, Offline: false, SuperVC: self, completionSuccess: { (modelResponse) in

            ApiUtillity.sharedInstance.StopProgress(view: self.view)

            if(modelResponse.success == true) {
                self.categoryData.removeAll()
                let resul_array_tmp_new = modelResponse.categories! as NSArray

                if resul_array_tmp_new.count > 0 {
                    for i in modelResponse.categories! {
                        if i.count != 0 {
                            if let image = UIImage(named: "\(i.slug!.uppercased())") {
                                self.arrCategoryImages.append(image)
                                self.categoryData.append(i)
                            }else {
                                self.arrCategoryImages.append(UIImage(named: "tickets")!)
                                self.categoryData.append(i)
                            }
                        }
                    }
                }
            }
            else {
                self.view.makeToast(modelResponse.message)
            }
            ApiUtillity.sharedInstance.StopProgress(view: self.view)
            self.categoryColView.reloadData()
        }) { (failed) in
            ApiUtillity.sharedInstance.StopProgress(view: self.view)
            self.view.makeToast(failed.localizedDescription)
        }
    }
    else
    {
        self.view.makeToast("No Internet Connection..")
    }
}

func getStoreList() {
    if ApiUtillity.sharedInstance.isReachable() {

        ApiUtillity.sharedInstance.StartProgress(view: self.view)

        APIClient<ModelBaseStoreList>().API_GET(Url: SD_GET_StoreList, Params: [:], Authentication: true, Progress: true, Alert: true, Offline: false, SuperVC: self, completionSuccess: { (modelResponse) in

            ApiUtillity.sharedInstance.StopProgress(view: self.view)

            if(modelResponse.success == true) {

                self.storeData.removeAll()
                let resul_array_tmp_new = modelResponse.store! as NSArray

                if resul_array_tmp_new.count > 0 {
                    for i in modelResponse.store! {
                        if i.count != 0 {
                            self.storeData.append(i)
                        }
                    }
                }
            }
            else {
                self.view.makeToast(modelResponse.message)
            }
            ApiUtillity.sharedInstance.StopProgress(view: self.view)
            self.categoryColView.reloadData()
        }) { (failed) in
            ApiUtillity.sharedInstance.StopProgress(view: self.view)
            self.view.makeToast(failed.localizedDescription)
        }
    }
    else
    {
        self.view.makeToast("No Internet Connection..")
    }
}

}

// MARK:委托和数据源方法 扩展CategoryViewController:UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout {

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    if selectedBtnIndex == 1{
        return categoryData.count
    }else {
        return storeData.count
    }
}

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

    if selectedBtnIndex == 1{
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CategoryCell1", for: indexPath) as! CategoryCell1

        let dict = categoryData[indexPath.row]

        if let catName = dict.name, catName.count != 0 {
            cell.categoryName.text = catName
        }

        if let catOffersCount = dict.count {

            if catOffersCount == 1 {
              cell.catOfferCount.text = "\(catOffersCount)"+" "+"Offer"
            }else {
                cell.catOfferCount.text = "\(catOffersCount)"+" "+"Offers"
            }
        }

        cell.categoryImage.image = arrCategoryImages[indexPath.row]

        cell.btn_click.tag = indexPath.row
        cell.btn_click.addTarget(self, action: #selector(self.click_Category), for: .touchUpInside)

        if selectedIndexPaths.contains(indexPath.row) {
            cell.btn_click.setImage(#imageLiteral(resourceName: "image_checked"), for: .normal)
            cell.btn_click.isSelected = true
        }else {
            cell.btn_click.setImage(#imageLiteral(resourceName: "image_unchecked"), for: .normal)
            cell.btn_click.isSelected = false
        }

        return cell
    }else {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "StoresCell", for: indexPath) as! StoresCell

        let dict = storeData[indexPath.row]

        if let storeName = dict.name, storeName.count != 0 {
            cell.storeName.text = storeName
        }

        if let storeOfferCount = dict.count {
            cell.storeOfferCount.text = "\(storeOfferCount)"+" "+"Offers"
        }

        cell.store_btn_click.tag = indexPath.row
        cell.store_btn_click.addTarget(self, action: #selector(self.click_store), for: .touchUpInside)


        if tempStoreIndexPaths.contains(indexPath.row) {
            cell.store_btn_click.setImage(#imageLiteral(resourceName: "image_checked"), for: .normal)
            cell.store_btn_click.isSelected = true
        }else {
            cell.store_btn_click.setImage(#imageLiteral(resourceName: "image_unchecked"), for: .normal)
            cell.store_btn_click.isSelected = false
        }

        return cell
    }
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

    if selectedBtnIndex == 1{
       return CGSize(width: (UIScreen.main.bounds.width) / 3, height: 93)
    }else {
        return CGSize(width: (UIScreen.main.bounds.width) / 2, height: 48)
    }
}

homeView COntroller的代码如下:

导入UIKit

HomeViewController类:UIViewController {

var couponsData = [ModelCoupons]()

var couponId = Int()


@IBOutlet weak var homeTblView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()

    self.homeTblView.register(UINib(nibName: "HomeCell", bundle: nil), forCellReuseIdentifier: "HomeCell")
    self.post_CouponsData()

}

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

//MARK: IBActions
@IBAction func toCategoryScreen(_ sender: UIButton) {
    self.navigationController?.popViewController(animated: true)
}

@IBAction func toSearchPage(_ sender: UIButtonX) {
    let vc = self.storyboard?.instantiateViewController(withIdentifier: "SearchPageController") as! SearchPageController
    self.navigationController?.pushViewController(vc, animated: true)
}

func post_CouponsData() {
    if ApiUtillity.sharedInstance.isReachable() {

        var params = [String : String]()

        params ["term_ids"] = "\(self.couponId)"

        ApiUtillity.sharedInstance.StartProgress(view: self.view)

        APIClient<ModelBaseCouponsList>().API_POST(Url: SD_POST_CouponsList, Params: params as [String:AnyObject], Authentication: true, Progress: true, Alert: true, Offline: false, SuperVC: self, completionSuccess: { (modelResponse) in

            ApiUtillity.sharedInstance.StopProgress(view: self.view)

            if(modelResponse.success == true) {

                ApiUtillity.sharedInstance.StopProgress(view: self.view)

                let dict = modelResponse.coupons
                for i in dict! {
                    self.couponsData.append(i)
                }

            }else {
                self.view.makeToast(modelResponse.message)
            }
            ApiUtillity.sharedInstance.StopProgress(view: self.view)
            self.homeTblView.reloadData()

        }) { (failed) in
            self.view.makeToast(failed.localizedDescription)
            ApiUtillity.sharedInstance.StopProgress(view: self.view)
        }
    }else {
        self.view.makeToast("No internet connection...")
        ApiUtillity.sharedInstance.StopProgress(view: self.view)
    }
}

}

扩展名HomeViewController:UITableViewDelegate,UITableViewDataSource {     func tableView(_ tableView:UITableView,numberOfRowsInSection部分:Int)-> Int {         返回couponsData.count     }

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "HomeCell", for: indexPath) as! HomeCell
    let dict = couponsData[indexPath.row]

    if let postTitle = dict.postTitle, postTitle.count != 0 {
        cell.ticket_postTitle.text = postTitle
    }
    if let postContent = dict.postContent, postContent.count != 0 {
        cell.ticket_postContent.text = postContent
    }
    if let storeName = dict.stores, storeName.count != 0 {
        cell.storename.text = storeName
    }

    let dateFormatterGet = DateFormatter()
    dateFormatterGet.dateFormat = "yyyy-MM-dd"
    let dateFormatterPrint = DateFormatter()
    dateFormatterPrint.dateFormat = "dd MMMM yyyy"

    let datee = ApiUtillity.sharedInstance.ConvertStingTodate(forApp: dict.validTill!)
    cell.ticket_ValidDate.text = dateFormatterPrint.string(from: datee)

    cell.ticketImageView.tintColor = .random()
    return cell
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 339.0
}

func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
    return 339.0
}

}

0 个答案:

没有答案