POST

作者: 阙年 | 来源:发表于2018-05-31 16:12 被阅读0次

    111

    let recipeVC = recipeViewController()

            recipeVC.navigationController?.title = "caipi"

            let recipeNav = UINavigationController(rootViewController: recipeVC)

            self.window?.rootViewController = recipeNav


    222

    import UIKit


    class URlService: NSObject
    {

    //    所有的请求搜索的菜谱数据
       
        func searchRecipes(search:String,vc:UIViewController,completion:@escaping (Any,Bool) -> Void)
        {
            //  (1)  判断无网络情况
            if Reachability.forLocalWiFi().currentReachabilityStatus() == NotReachable && Reachability.forInternetConnection().currentReachabilityStatus() == NotReachable {
                vc.showAlert(msg: "网络错误", sec: 2.5)
                completion("error",false)
                return
            }
           
            //有网络菊花开始转动
    //        状态栏中的菊花开始转动
            UIApplication.shared.isNetworkActivityIndicatorVisible = true
    //        网址字符串封装
            let url = URL.init(string: "http://api.jisuapi.com/dream/search")
    //        (4)创建请求对象
            var req = URLRequest.init(url: url!, cachePolicy: .reloadRevalidatingCacheData, timeoutInterval: 15.0)
    //        设置请求方式为post
            req.httpMethod = "POST"
            // 将所有的参数拼接成一个字符串
            let str = "keyword=\(search)&num=10&appkey=de394933e1a3e2db"
           
    //        设值请求对象的请求体
            req.httpBody = str.data(using: .utf8)
    //        (5)会话对象请求网络数据
            URLSession.shared.dataTask(with: req) { (data, response, error) in
    //            停止菊花
                DispatchQueue.main.async {
                    UIApplication.shared.isNetworkActivityIndicatorVisible = false
                   
                }
    //            如果连接失败
                if error != nil{
                    DispatchQueue.main.async {
                        vc.showAlert(msg: "服务器超市", sec: 2.5)
                    }
                    return
                }
    //            如果服务器连接成功 JSON解析
               let jsonData = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments)
               
                if jsonData == nil{
                    DispatchQueue.main.async {
                    vc.showAlert(msg: "网路数据错误", sec: 2.5)
                    }
                    return
                }
    //            如果正确,将解析的json数据返回给controller
    //            completion(jsonData!,true)
                let jsonDic = jsonData as! NSDictionary
                let status = jsonDic.value(forKey: "status") as! NSString
                let msg = jsonDic.value(forKey: "msg")as! String
    //            判断是否为零
                if status.intValue != 0{
                    DispatchQueue.main.async {
                        vc.showAlert(msg: msg, sec: 2.5)
                    }
                    return
                }
                let resultDic = jsonDic.value(forKey: "result") as! NSDictionary
    //            获取result字典中的list数组
                let listArr = resultDic.value(forKey: "list") as! NSArray
               
                // MOdel封装
                var modelArr:[Recipe] = []
    //            遍历数组中的每个字典
                for item in listArr{
                    let itemDic = item as! NSDictionary
                    let one = Recipe()
                    one.name = itemDic.value(forKey: "name") as? String
                    one.id = itemDic.value(forKey: "id") as? String
                    one.content = itemDic.value(forKey: "content") as? String
                    modelArr.append(one)
                   
                }
                completion(modelArr,true)
               
            }.resume()
        }
    }

    333

        var id:String?

        var classid:String?

        var name:String?

        var peoplenum:String?

        var preparetime:String?

        var content:String?

    444

    //给UIViewController添加扩展

    extension UIViewController{

        func showAlert(msg:String,sec:TimeInterval) {

            //    实例化一个弹出控制器

            let alertVC  = UIAlertController(title: nil, message: msg, preferredStyle: .alert)

            //    从vc控制器弹出提示控制器

            self.present(alertVC, animated: true, completion: nil)

            //    延时执行隐藏操作

            self.perform(#selector(hideAlertVc(sender:)), with: alertVC, afterDelay: sec)

        }

        @objc func hideAlertVc(sender:UIAlertController) {

            sender.dismiss(animated: true, completion: nil)

        }

    }

    recipeTF = UITextField(frame: CGRect(x: 0, y: 0, width: 200, height: 50))

            recipeTF?.center = CGPoint(x: scrWidth/2, y: 200)

            recipeTF?.borderStyle = .line

            recipeTF?.placeholder = "请输入查询的菜谱"

            recipeTF?.textColor = UIColor.red

            recipeTF?.clearButtonMode = .unlessEditing

            recipeTF?.delegate = self

            self.view.addSubview(self.recipeTF!)

    searchBtn = UIButton(frame: CGRect(x: 0, y: 0, width: 100, height: 50))

            searchBtn?.center = CGPoint(x: scrWidth/2, y: 300)

            searchBtn?.setTitle("点击查询", for: .normal)

            searchBtn?.backgroundColor = UIColor.blue

            searchBtn?.setTitleColor(UIColor.yellow, for: .normal)

            searchBtn?.addTarget(self, action: #selector(btnDidpress(sender:)), for: .touchUpInside)

            self.view.addSubview(searchBtn!)

    @objc func btnDidpress(sender:UIButton) {

            //判断用户有没有输入数据

            if(recipeTF?.text?.isEmpty)!{

                self.showAlert(msg: "信息不可为空", sec: 2.5)

                return

            }

    // 实例化一个控制器对象

            let resultVC = RecipeResultViewController()

    //        传递数据

            resultVC.passString = (recipeTF?.text)!

    //        控制器跳转

            self.navigationController?.pushViewController(resultVC, animated: true)

    override func touchesBegan(_ touches: Set, with event: UIEvent?) {

            super.touchesEnded(touches, with: event)

            recipeTF?.resignFirstResponder()

            //让view 还有子视图放弃编辑操纵,如果是textField就收回键盘

            self.view.endEditing(true)

    555

    import UIKit

    class RecipeResultViewController: UIViewController,UITableViewDataSource {

        var passString:String = ""

        var tableData:[Recipe]?

        var table:UITableView?

        override func viewDidLoad() {

            super.viewDidLoad()

            // Do any additional setup after loading the view.

            self.view.backgroundColor = UIColor.blue

            self.navigationItem.title = "\"\(passString)\"的搜索结果"

            table = UITableView.init(frame: CGRect.init(x: 0, y: 0, width:scrWidth , height: scrHeight),style:.plain)

            table?.dataSource = self

    //        self.table?.rowHeight = 200

            self.view.addSubview(self.table!)

        }

        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

            if let count = tableData?.count{

                return count

            }

            return 0

    //        return(tableData?.count)!

        }

        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

            let identifier = "cell"

            var cell = tableView.dequeueReusableCell(withIdentifier: identifier)

            if cell == nil  {

                cell = UITableViewCell.init(style: .subtitle, reuseIdentifier: identifier)

            }

            let one = self.tableData![indexPath.row] as? Recipe

            cell?.textLabel?.text = one?.name

            cell?.detailTextLabel?.text = one?.content

            return cell!

        }

    $(SRCROOT)/

    最后网络请求 nsapp

        override func viewWillAppear(_ animated: Bool) {

    //        请求网络数据

            let urlSer = URlService()

            urlSer.searchRecipes(search: self.passString, vc: self) { (data, success) in

                if !success{

                    return

                }

                self.tableData = data as?[Recipe]

                DispatchQueue.main.async {

                    self.table?.reloadData()

                }

            }

        }

    }

    相关文章

      网友评论

          本文标题:POST

          本文链接:https://www.haomeiwen.com/subject/gsmqsftx.html