创建桥接文件 导入3.0
创建RecipeResultViewController,RecipeViewController,,XiangQingViewController, 继承uiviewcontroller 进行跳转
创建URLService 继承NSObject 创建 Recipe
.plist中 App Transport Security Settings 加Allow Arbitrary Loads
在AppDelegate中
letdenglu = dengluViewController()
//登录
denglu.navigationItem.title = ""
let nav1 = UINavigationController.init(rootViewController: denglu)
self.window?.rootViewController = nav1
RecipeResultViewController中 关于什么什么的
import UIKit
class RecipeResultViewController: ViewController,UITableViewDelegate,UITableViewDataSource {
var passString:String = ""
var table : UITableView?
var tableData:[Recipe]?
var uitext :UITextField?
var v2:UILabel?
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.title = "《关于\(passString)的相似结果》"
//设置当前视图背景
// self.table?.layer.contents = UIImage(named:"timg.png")?.cgImage
table = UITableView(frame: CGRect(x: 0, y: 0, width: SCrwidth, height: SCrheight))
table?.dataSource = self
table?.delegate = self
self.view.addSubview(table!)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let urlser = URLService()
urlser.GetRecipes(search: self.passString, vc: self) { (data, success) in
if !success{
return
}
self.tableData = data as? [Recipe]
DispatchQueue.main.async {
self.table?.reloadData()
}
}
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if (tableData?.count) != nil {
return (tableData?.count)!
}
return 0
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let id = "cell"
var cell = tableView.dequeueReusableCell(withIdentifier: id)
cell =UITableViewCell(style: .subtitle, reuseIdentifier: id)
let one = self.tableData![indexPath.row]
let v = UILabel(frame: CGRect(x: 0, y: 0, width: SCrwidth, height: 30))
v.font = UIFont.systemFont(ofSize: 18)
v.textColor = UIColor.orange
v.text = one.name
v.textAlignment = NSTextAlignment.center
v.font = UIFont(name: "Bobz Type", size: 26)
v2 = UILabel(frame: CGRect(x: 0, y: 30, width: SCrwidth, height: 80))
v2?.numberOfLines = 2
v2?.font = UIFont.systemFont(ofSize: 16)
// v2?.font = UIFont(name: "Bobz Type", size: 16)
v2?.text = one.content
cell?.addSubview(v)
cell?.addSubview(v2!)
return cell!
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 120
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
//实例化结果控制器
let xiangqingVC = XiangQingViewController()
//传递数据
// xiangqingVC.passwith = (UITextFielding?.text)!
let one = self.tableData![indexPath.row] as? Recipe
xiangqingVC.one?.name = (one?.name)!
xiangqingVC.one?.date = (one?.content)!
xiangqingVC.xiangqingqing = (one?.content)!
//控制器跳转
self.navigationController?.pushViewController(xiangqingVC, animated: true)
}
}
搜索的RecipeViewController
import UIKit
let SCrwidth = UIScreen.main.bounds.size.width
let SCrheight = UIScreen.main.bounds.size.height
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(hidAlertVC(sender:)), with: alertVC, afterDelay: sec)
}
@objc func hidAlertVC(sender:UIViewController) -> Void {
sender.dismiss(animated: true, completion: nil)
}
}
class RecipeViewController: UIViewController ,UITextFieldDelegate{
var passwith:String = ""
//
// XiangQingViewController.swift
// 项目
//
// Created by Kiming on 2018/6/13.
// Copyright © 2018年 KingMin. All rights reserved.
//
var RecipeTF : UITextField? //菜谱输入框
var SearchBtn : UIButton? //搜索按钮
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.white
//设置当前视图背景
self.view.layer.contents = UIImage(named:"20150408H5819_PmTZe")?.cgImage
RecipeTF = UITextField(frame: CGRect(x: 0, y: 0, width: 260, height: 50))
RecipeTF?.center = CGPoint(x: SCrwidth/2, y: 200)
RecipeTF?.borderStyle = .line
RecipeTF?.placeholder = "请输入需要查询的菜谱"
RecipeTF?.textColor = UIColor.red
RecipeTF?.layer.cornerRadius = 9
RecipeTF?.layer.masksToBounds = true
RecipeTF?.textAlignment = .center
RecipeTF?.clearButtonMode = .whileEditing
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?.layer.cornerRadius = 9
SearchBtn?.layer.masksToBounds = true
SearchBtn?.backgroundColor = UIColor.blue
SearchBtn?.alpha = 0.6
SearchBtn?.setTitleColor(UIColor.yellow, for: .normal)
SearchBtn?.addTarget(self, action: #selector(btnDidPress(sender:)), for: .touchUpInside)
self.view.addSubview(self.SearchBtn!)
}
@objc func btnDidPress(sender:UIButton) -> Void {
if (RecipeTF?.text?.isEmpty)! {
self.showAlert(msg: "信息不可为空", sec: 2)
return
}
//实例化结果控制器
let resuVC = RecipeResultViewController()
//传递数据
resuVC.passString = RecipeTF!.text!
//控制器跳转
self.navigationController?.pushViewController(resuVC, animated: true)
}
//点击return触发回调
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
//放弃第一响应
textField.resignFirstResponder()
return true
}
//点击空白处触发的方法
override func touchesBegan(_ touches: Set, with event: UIEvent?) {
super.touchesEnded(touches, with: event)
//将view及其子视图放弃编辑,如果是Textfiled就收回键盘
self.view.endEditing(true)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
搞个详情的
import UIKit
class XiangQingViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
var one:Movie?
var xiangqingqing:String = ""
var titleName:String = ""
var uifidtext:UITextField?
var table : UITableView?
var tableData:[Recipe]?
var uitext :UITextField?
var v2:UILabel?
override func viewDidLoad() {
super.viewDidLoad()
// DataHandle.shared().addOneMovie(passwd.self)
self.view.backgroundColor = UIColor.white
let rightBut = UIButton(frame: CGRect(x: 0, y: 0, width: 40, height: 40))
rightBut.setTitle("收藏", for: .normal)
rightBut.setTitleColor(UIColor.red, for: .normal)
rightBut.addTarget(self, action: #selector(buttonDidPress), for: .touchUpInside)
self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: rightBut)
self.navigationItem.title = "详情"
table = UITableView.init(frame: CGRect(x: 0, y: 0, width: SCrwidth, height: SCrheight), style: .plain)
table?.dataSource = self
table?.delegate = self
self.view.addSubview(table!)
}
func buttonDidPress() -> Void {
let ace = DataHandle()
ace.addOneMovie(self.one)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// let urlser = URLServiceabc()
// urlser.GetRecipes(search: self.xiangqingqing, vc: self) { (data, success) in
// if !success{
// return
// }
// self.tableData = data as? [Recipe]
// DispatchQueue.main.async {
// self.table?.reloadData()
// }
// }
//
}
// func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// if (tableData?.count) != nil {
// return (tableData?.count)!
//
// }
// return 0
// }
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1;
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let id = "cell"
var cell = tableView.dequeueReusableCell(withIdentifier: id)
if cell == nil {
cell =UITableViewCell(style: .subtitle, reuseIdentifier: id)
}
cell?.textLabel?.text = self.xiangqingqing;
cell?.textLabel?.numberOfLines = 0;
return cell!
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return SCrwidth;
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
URLService中
import UIKit
class URLService: NSObject {
// self.view.backgroundColor = UIColor.white
//请求搜索的菜谱数据
func GetRecipes(search:String,vc:UIViewController,completion:@escaping (Any,Bool)->Void) {
//使用POST请求数据
//1 判断无网络情况
if Reachability.forLocalWiFi().currentReachabilityStatus() == NotReachable &&
Reachability.forInternetConnection().currentReachabilityStatus() == NotReachable{
vc.showAlert(msg: "网络错误,请检查网络", sec: 2.5)
completion("error",false)
return
}
//2 如果有网络 状态栏中的菊花开始转动
UIApplication.shared.isNetworkActivityIndicatorVisible = true
//3 网址字符串封装
let url = URL.init(string: "http://api.jisuapi.com/recipe/search")
//4 创建请求对象
var req = URLRequest.init(url: url!, cachePolicy: .reloadIgnoringCacheData, 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:Data?, response:URLResponse?, error:Error?) in
//停止菊花
DispatchQueue.main.async {
UIApplication.shared.isNetworkActivityIndicatorVisible = false
}
//如果服务器连接失败 或超时
if error != nil{
DispatchQueue.main.async {
vc.showAlert(msg: "服务器超时", sec: 2)
//刷新表格
}
return
}
//json解析
let jsonData = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments)
if jsonData == nil{
DispatchQueue.main.async {
vc.showAlert(msg: "网络数据错误", sec: 2)
}
return
}
// 如果正确 将解析的json数据返回给controller
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)
}
return
}
//得到json数据中 result字段对应的字典
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.classid = itemDic.value(forKey: "classid") as? String
one.content = itemDic.value(forKey: "content") as? String
modelArr.append(one)
}
completion(modelArr,true)
}.resume()
}
}
在Recipe中
import UIKit
class Recipe: NSObject {
var id:String?
var classid:String?
var name:String?
var content:String?
var peoplenum:String?
var preparetime:String?
var cookingtime:String?
// var num:Int?
// var keyword:String?
var process:String?
var pcontent:String?
}