iosapp0201_自定义表格单元,接收标题,ID,图片,在表格中显示;点击单元格实现跳转

项目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
        }
        
        
        
    }

猜你喜欢

转载自blog.csdn.net/whqwjb/article/details/86736044