POST

2018-05-31  本文已影响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()

            }

        }

    }

}

上一篇 下一篇

猜你喜欢

热点阅读