项目staartimage0131
自定义单元格,要创建控制单元格的类文件,创建文件选择TableViewCell分类的。同样的要把单元格的class和创建的文件绑定。
注意:navcontroller 传数据不成功,需要传数据的不使用。
viewcontroller 列表文件
//
// ViewController.swift
// staartimage0131
//
// Created by Mac on 1/31/19.
// Copyright © 2019 chinaoption.net. All rights reserved.
//
import UIKit
import Alamofire
import SwiftyJSON
class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
@IBOutlet weak var newlist_tableview: UITableView!
//
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
//返回获取对象的个数
return id_image_title_arr.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//采用以下语法定义单元格对象。能获取自定义的单元格内容,并且将单元格指定为类的对象
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! NewListCellTableViewCell
//将字典组成的数组中获取表格行对对应的元素
let id_image_title = id_image_title_arr[indexPath.row]
//执行类单元格类中创建的方法
cell.getImageTitleID(image_str: id_image_title["image"]!, titel_str: id_image_title["title"]!, news_id:id_image_title["id"]!)
return cell
}
//创建数组,接收响应获取的数据,注意数组的单元是字典类型,千万注意这里的数组类型,试了很多遍
var id_image_title_arr : [[String:String]] = []
//创建url获取请求的方法
func doUrlRequest(url_str:String){
Alamofire.request(url_str, method: HTTPMethod.get, parameters: nil, encoding: URLEncoding.default, headers: nil).responseJSON { (responce) in
//检测响应数据
if responce.result.isSuccess{
let json_obj = JSON(responce.result.value)
for (index,dict) in json_obj{
// print(dict)
//手动创建字典数组
self.id_image_title_arr.append(["id":String(dict["id"].intValue),"image":dict["news_cover"].stringValue,"title":dict["post_title"].stringValue])
}
//重新加载表格视图
self.newlist_tableview.reloadData()
}else{
print(responce.error)
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
//设置访问链接
let url_str = "http://www.chinaoption.net/iosapp/news/appnewlist"
//执行url请求访问
doUrlRequest(url_str: url_str)
//接收数据后执行将数据赋值给cell的方法
}
//
var button_tag = ""
@IBAction func list_to_show_button(_ sender: UIButton) {
self.button_tag = String(sender.tag)
print(button_tag)
performSegue(withIdentifier: "list_to_show", sender: self)
}
//扩展页面传递数据的办法
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "list_to_show" {
//实例化接受页面的对象
let show = segue.destination as! NewShowViewController
//将对象内的变量赋值
show.news_id = button_tag
}
}
}
单元格控制类文件:
//
// NewListCellTableViewCell.swift
// staartimage0131
//
// Created by Mac on 1/31/19.
// Copyright © 2019 chinaoption.net. All rights reserved.
//
import UIKit
class NewListCellTableViewCell: UITableViewCell {
//图片位置
@IBOutlet weak var Cell_imageview: UIImageView!
//标题位置
@IBOutlet weak var Cell_Title_label: UILabel!
//按钮视图,设置其tag值存放id
@IBOutlet weak var cell_button_tag: UIButton!
//按钮
@IBAction func Cell_button(_ sender: UIButton) {
//点击就是进入对应id的详情页
}
//设置类属性
var image_str = ""
var title_str = ""
var news_id = ""
//创建方法将类属性赋值
func getImageTitleID(image_str:String,titel_str:String,news_id:String){
self.image_str = image_str
self.title_str = titel_str
Cell_Title_label.text = self.title_str
self.news_id = news_id
cell_button_tag.tag = Int(self.news_id)!
getUrlImage(url_str:image_str,cell_imageview: Cell_imageview)
}
// 创建获取网络图片并加载的方法
func getUrlImage(url_str:String,cell_imageview:UIImageView){
//string转化为URL对象
let image_url = URL(string: url_str)
//创建 URLRequest(URL:url) 的实例对象
let request = URLRequest(url: image_url!)
//创建任务
let task = URLSession.shared.dataTask(with: request) { (data, responce, error) in
if error != nil {//错误存在为真
print(error!)
}else{//错误不存在
if let imageData = data{
//加入主线程
DispatchQueue.main.async {
//下载的数据赋值给data
cell_imageview.image = UIImage(data: imageData)
//控制图片视图的填充模式
cell_imageview.contentMode = UIView.ContentMode.scaleAspectFit
}
}
}
}
task.resume()
}
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
显示文件
//
// NewShowViewController.swift
// staartimage0131
//
// Created by Mac on 1/31/19.
// Copyright © 2019 chinaoption.net. All rights reserved.
//
import UIKit
//引入模块WebKit
import WebKit
class NewShowViewController: UIViewController {
@IBAction func dismiss_item(_ sender: UIBarButtonItem) {
// navigationController?.dismiss(animated: true, completion: nil)
self.dismiss(animated: true, completion: nil)
}
@IBOutlet weak var show_id: UILabel!
@IBOutlet weak var newshow_view: UIView!
var news_id = ""
//创建加载页面的方法,参数为链接字符串和UIView 类的视图容器
func get_url_html(url_str:String,web_area_view:UIView) {
let web_view = WKWebView()
//设置对象的位置的尺寸
web_view.frame = CGRect(x: 0, y: 0, width: web_area_view.frame.width, height: web_area_view.frame.height)
//创建访问链接对象
let url = NSURL(string: url_str)
//根据链接创建访问请求对象
let url_request = NSURLRequest(url: url! as URL)
//webview的load方法调用请求,返回url的页面内容
web_view.load(url_request as URLRequest)
//将web——view模块加载到区域视图中
web_area_view.addSubview(web_view)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
show_id.text = news_id
//创建访问的链接参数
let url_str = "http://www.chinaoption.net/iosapp/news/show/id/\(news_id)"
//使用链接参数调用自定义方法
get_url_html(url_str: url_str, web_area_view: newshow_view)
}
}
扩展,直接点击单元格实现跳转
//扩展一下方法,在单元格被点击的时候,跳转链接,发送数据
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
//获取单元格内的数据,就是在对应行的数据
let send_date = id_image_title_arr[indexPath.row]
//注意吧要传递的数据放到参数中
performSegue(withIdentifier: "to_to", sender: send_date["title"])
}
//扩展链接
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "to_to" {
let two_view = segue.destination as! TwoViewController
//sender 就是接收的要发送的数据
two_view.recive_msg = sender as! String
}
}