代码之家  ›  专栏  ›  技术社区  ›  Wings

当我们在swift中从当前的ViewController转到上一个ViewController时,调用哪个方法

  •  0
  • Wings  · 技术社区  · 7 年前

    我有一个问题,我在一个应用程序,我提出了一个问题 ViewController(FilterVC) 从我以前的 ViewController(ItemsVC) . 我将过滤器数据存储在委托方法中,如下所示

    protocol FilterVCDelegate: class {
    func didSelectedFilters(_ sender: FilterVC, with selectedFilters: [String:Any])
    }
    

    一按按钮,我就成功地把数据传给了我以前的 ItemVC

    @IBAction func applyButtonAction(_ sender: UIButton) {
        printD(selectedFilters)
        self.delegate?.didSelectedFilters(self, with: self.selectedFilters)
        self.dismiss(animated: true, completion: nil)
    }
    

    项目VC:-

    func didSelectedFilters(_ sender: FilterVC, with selectedFilters: [String : Any]) {
        self.currentFilters = selectedFilters
        printD("selectedFilters \(currentFilters)") // successfully get data from previous vc
    }
    

    下面是调用api方法:-

    func searchFromLatestRelease() {
    
      //  let param: [String:Any] = ["page": pageNo, "search_term": forSearch, "order_by": "date", "token": commonClass.sharedInstance.userToken ?? ""]
    
        let param: [String:Any] = ["price_range": currentFilters["price"] as? [String] as Any, "page": "0", "is_rating": currentFilters["Product Rating"] as? [String] as Any]
        printD("param: \(param)")
        Alamofire.request(Constants.API.url("search"), method: .post, parameters: param, encoding: URLEncoding.httpBody, headers: nil).responseJSON {
            (response:DataResponse<Any>) in
    
            guard let json = response.result.value as? [String:Any] else {return}
            printD(json)
    
            guard let status = json["status"] as? Int else {return}
            printD(status)
    
            if status == 1 {
    
                if self.pageNo == 0 { self.sneakers = [] }
                guard let data = json["data"] as? [[String:Any]] else { return}
    
                printD(data)
                for dic in data {
                    self.sneakers.append(sneakerModel(response: dic))
                }
    
                self.reloadData()
    
            }
            else {
                commonClass.sharedInstance.showErrorMessage(json["msg"] as? String ?? "Server error. Please try again later.")
            }
        }
    }
    

    但如果叫它进来就不行了 ViewWillAppear ViewDidLoad . 现在我需要使用这些文件管理器作为参数来调用 . 刷新数据并成功显示 ItemsVC . 有8个 ViewControllers 项目VC

    在控制台中,我得到的currenFilter如下:-

    selectedFilters ["Product Rating": ["5", "4", "3", "2", "1"], "Price": ["$00.00 - $200.00", "$200.00 - $400.00", "$600.00 - $800.00", "$800.00 - $1000.00", "$1000.00 AND OVER"]]
    

    (有限责任公司)

    1 回复  |  直到 7 年前
        1
  •  1
  •   Shehata Gamal    7 年前

    viewDidLoad 在vc初始化时调用一次, ViewWillAppear / viewDidAppear 在模型解散后调用,您需要

    func didSelectedFilters(_ selectedFilters: [String : Any]) {
        self.currentFilters = selectedFilters
        self.searchFromLatestRelease()
    }