MicroCourseViewController.swift 14.4 KB
//
//  MicroCourseViewController.swift
//  YouerLiveVideo
//
//  Created by 左丞 on 2017/5/15.
//  Copyright © 2017年 左丞. All rights reserved.
//

import UIKit
import AVKit

class MicroCourseViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UISearchControllerDelegate,UISearchResultsUpdating,UISearchBarDelegate{
    @IBOutlet var tableView: UITableView!
    
    @IBOutlet var grayView: UIView!
    @IBOutlet var searchTableView: UITableView!
    @IBOutlet var searchTableHeight: NSLayoutConstraint!
    
    var searchController:UISearchController!
    var dataSetAry:[String]=["葛建军","张道峰","徐晓杰","左承","段合江"]
    var searchAry:[MicroCourseModel]=[]
    var currentPage:Int=1 //当前页数,每次取十个数据
    var resourceData:[MicroCourseModel]=[]
    var parameter:Dictionary<String,AnyObject>?
    override func viewDidLoad() {
        super.viewDidLoad()
        self.configTheme()
        addSearchController()
        addRefresh()
        self.refreshLivesAction(parameters: ["type":0 as AnyObject,"orderby":1 as AnyObject,"pageIndex":self.currentPage as AnyObject,"pageSize":10 as AnyObject], completionHandler: { (success) in
            if success{
                self.tableView.reloadData()
            }
        })
        NotificationCenter.default.addObserver(self, selector: #selector(ResourceViewController.reloadTableView), name: NSNotification.Name(rawValue: "FilterReloadTableView"), object: nil)
    }
    //筛选结束后刷新界面
    func reloadTableView(noti:Notification){
        let parameters=(noti.object as! Dictionary<String,AnyObject>)
        if parameters["type"]?.int8Value==0{
            parameter=parameters
            currentPage=1
            resourceData.removeAll()
            refreshLivesAction(parameters: parameters, completionHandler: { (success) in
                if success{
                    self.tableView.reloadData()
                }
            })
        }
    }
    func addSearchController(){
        self.definesPresentationContext=true
        searchController=UISearchController(searchResultsController: nil)
        searchController.delegate=self
        searchController.searchBar.delegate=self
        searchController.searchResultsUpdater=self
        searchController.searchBar.barTintColor=UIColor.groupTableViewBackground
        searchController.searchBar.placeholder="搜索"
        //设置UISearchController的显示属性,以下3个属性默认为YES
        //搜索时,背景变暗色
        self.searchController.dimsBackgroundDuringPresentation=false
        //搜索时,背景变模糊
        //        self.searchController.obscuresBackgroundDuringPresentation=false
        //点击搜索的时候,是否隐藏导航栏
        //        searchController.hidesNavigationBarDuringPresentation=true
        //位置
        searchController.searchBar.frame=CGRect(x: self.searchController.searchBar.frame.origin.x, y: self.searchController.searchBar.frame.origin.y, width: self.searchController.searchBar.frame.size.width, height: 44.0);
        //        self.view.addSubview(searchController.searchBar)
        searchTableView.tableHeaderView=searchController.searchBar
    }
    func addRefresh(){
        let header=MJRefreshNormalHeader(refreshingBlock: {
            //下拉刷新
            self.currentPage=1
            self.resourceData.removeAll()
            var p:Dictionary<String,AnyObject>=["type":0 as AnyObject,"orderby":1 as AnyObject,"pageIndex":self.currentPage as AnyObject,"pageSize":10 as AnyObject]
            if self.parameter != nil {
                self.parameter!.updateValue(self.currentPage as AnyObject, forKey: "pageIndex")
                p=self.parameter!
            }
            self.refreshLivesAction(parameters: p, completionHandler: { (success) in
                if success{
                    self.tableView.reloadData()
                }
                self.tableView.mj_header.endRefreshing()
            })
        })
        header?.lastUpdatedTimeLabel.isHidden=true
        tableView.mj_header=header
        tableView.mj_footer=MJRefreshBackNormalFooter(refreshingBlock: {
            //上拉加载更多
            var p:Dictionary<String,AnyObject>=["type":0 as AnyObject,"orderby":1 as AnyObject,"pageIndex":self.currentPage as AnyObject,"pageSize":10 as AnyObject]
            if self.parameter != nil {
                self.parameter!.updateValue(self.currentPage as AnyObject, forKey: "pageIndex")
                p=self.parameter!
            }
            self.refreshLivesAction(parameters: p, completionHandler: { (success) in
                if success{
                    self.tableView.reloadData()
                }
                self.tableView.mj_footer.endRefreshing()
            })
        })
    }
    // MARK: - 刷新数据接口
    func refreshLivesAction(isSearch:Bool=false,parameters:Dictionary<String,AnyObject>,completionHandler:@escaping (Bool) -> ()){
        AppDelegate.instance().httpServer.postResourceList(parameters: parameters) { (str, error) in
            var success:Bool=true
            if error==nil {
                if JSON.fromString(jsonString: str)!["status"].intValue == 1{
                    httpJsonResule(jsonString: str, error: error, successHandler: { (json) in
                        if isSearch {
                            for item in JSON.fromString(jsonString: str)!["data"].arrayValue {
                                self.searchAry.append(MicroCourseModel(j: item))
                            }
                        }else{
                            if JSON.fromString(jsonString: str)!["data"].arrayValue.count>0{
                                self.currentPage+=1
                            }
                            for item in JSON.fromString(jsonString: str)!["data"].arrayValue {
                                self.resourceData.append(MicroCourseModel(j: item))
                            }
                        }
                        success=true
                    }, failHandler: { (error) in
                        success=false
                    })
                }else{
                    success=false
                }
            }else{
                success=false
            }
            completionHandler(success)
        }
    }
    // MARK: - 跳转到筛选
    @IBAction func jumpFilterVCAction(_ sender: UIButton) {
        let vc = UIStoryboard(name: "Resource", bundle: nil).instantiateViewController(withIdentifier: "FilterViewController") as! FilterViewController
        vc.type=FilterParameter(type: 0)
        self.present(vc.wrapWithNavigationController(), animated: true, completion: nil)
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if tableView==searchTableView{
            return searchAry.count
        }else{
            return resourceData.count
        }
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        if tableView==searchTableView {
            let cell=tableView.dequeueReusableCell(withIdentifier: "cell")
            cell?.textLabel?.text=searchAry[indexPath.row].f_Title
            return cell!
        }else{
            let cell=tableView.dequeueReusableCell(withIdentifier: "identifier") as! MicroCourseViewControllerTableViewCell
            cell.superVC=self
            cell.setUpWith(item: resourceData[indexPath.row])
            return cell
        }
    }
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
//        let vc = UIStoryboard(name: "Resource", bundle: nil).instantiateViewController(withIdentifier: "LiveInforViewControllerVC") as! LiveInforViewController
//        vc.item=item
//        self.superVC.navigationController!.pushViewController(vc, animated: true)
        var item:MicroCourseModel!
        if tableView==searchTableView {
            item=searchAry[indexPath.row]
        }else{
            item=resourceData[indexPath.row]
        }
        let url = URL(string:item.f_ResourceUrl)
        let player = AVPlayerViewController()
        player.player = AVPlayer(url: url!)
        player.videoGravity = AVLayerVideoGravityResizeAspect
        self.present(player, animated: true, completion: nil)
        AppDelegate.instance().httpServer.updatePv(parameters: ["f_id":item.f_Id as AnyObject]) { (str, error) in
            if error==nil {
                if JSON.fromString(jsonString: str)!["status"].intValue == 1{
                    //更新阅读量成功刷新页面
                    self.currentPage=1
                    self.resourceData.removeAll()
                    var p:Dictionary<String,AnyObject>=["type":0 as AnyObject,"orderby":1 as AnyObject,"pageIndex":self.currentPage as AnyObject,"pageSize":10 as AnyObject]
                    if self.parameter != nil {
                        self.parameter!.updateValue(self.currentPage as AnyObject, forKey: "pageIndex")
                        p=self.parameter!
                    }
                    self.tableView.reloadData()
                    self.refreshLivesAction(parameters: p, completionHandler: { (success) in
                        if success{
                            self.tableView.reloadData()
                        }
                    })
                }
            }
        }
        AppDelegate.instance().httpServer.addHistoryView(parameters: ["f_ViewType":0 as AnyObject,
                                                                      "f_ViewId":item.f_Id as AnyObject,
                                                                      "f_ViewName":item.f_Title as AnyObject]) { (str, error) in
        }
    }
    //取消键盘输入状态
    @IBAction func cancleSearchActivit(_ sender: UITapGestureRecognizer) {
        self.searchAry.removeAll()
        searchTableHeight.constant=44
        self.searchTableView.reloadData()
        searchController.isActive=false
    }
    func willPresentSearchController(_ searchController: UISearchController) {
        grayView.isHidden=false
    }
    func willDismissSearchController(_ searchController: UISearchController) {
        searchTableHeight.constant=44
        grayView.isHidden=true
    }
    //searchaBarDelegate
    func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
        refreshLivesAction(isSearch: true,parameters: ["type":0 as AnyObject,"orderby":1 as AnyObject,"pageIndex":1 as AnyObject,"keyword":searchBar.text as AnyObject,"pageSize":10 as AnyObject], completionHandler: { (success) in
            if success{
                if CGFloat((self.searchAry.count+1)*44)>(getScreenHeight()-64){
                    self.searchTableHeight.constant=getScreenHeight()-64
                }else{
                    self.searchTableHeight.constant=CGFloat((self.searchAry.count+1)*44)
                }
                self.searchTableView.reloadData()
            }
        })
    }
    func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
        self.searchAry.removeAll()
        searchTableHeight.constant=44
        self.searchTableView.reloadData()
        searchController.isActive=false
    }
    
    //谓词搜索过滤
    func updateSearchResults(for searchController: UISearchController) {
//        let searchString=searchController.searchBar.text
//        let predicate=NSPredicate(format: "SELF CONTAINS[c] %@", searchString!)
//        searchAry=(dataSetAry as NSArray).filtered(using: predicate) as! [String]
//        if CGFloat((searchAry.count+1)*44)>(getScreenHeight()-64){
//            searchTableHeight.constant=getScreenHeight()-64
//        }else{
//            searchTableHeight.constant=CGFloat((searchAry.count+1)*44)
//        }
//        searchTableView.reloadData()
    }
    
}

class MicroCourseViewControllerTableViewCell:UITableViewCell{
    @IBOutlet var iconImageView: UIImageView!
    @IBOutlet var titleLabel: UILabel!
    @IBOutlet var updateTeacherLabel: UILabel!
    @IBOutlet var timeLabel: UILabel!
    @IBOutlet var downLoadCountLabel: UILabel!
    var item:MicroCourseModel!
    var superVC:MicroCourseViewController!
    func setUpWith(item: MicroCourseModel){
        self.item=item
        iconImageView.sd_setImage(with: URL(string: item.f_Img), placeholderImage: UIImage(named: "microCourse_default"))
        titleLabel.text=item.f_Title
        updateTeacherLabel.text="主讲师:\(item.f_CreatorName)"
        timeLabel.text=setDateToString(date:dateFromISO8601(dateString: item.f_CreatorTime))
        downLoadCountLabel.text="\(item.f_Pv)"
    }
    @IBAction func pushDetailVC(_ sender: UIButton) {
//        let vc = UIStoryboard(name: "Resource", bundle: nil).instantiateViewController(withIdentifier: "LiveInforViewControllerVC") as! LiveInforViewController
//        vc.item=item
//        self.superVC.navigationController!.pushViewController(vc, animated: true)
        let url = URL(string:item.f_ResourceUrl)
        let player = AVPlayerViewController()
        player.player = AVPlayer(url: url!)
        player.videoGravity = AVLayerVideoGravityResizeAspect
        self.superVC.present(player, animated: true, completion: nil)
        AppDelegate.instance().httpServer.updatePv(parameters: ["f_id":item.f_Id as AnyObject]) { (str, error) in
            if error==nil {
                if JSON.fromString(jsonString: str)!["status"].intValue == 1{
                    //更新阅读量成功刷新页面
                    self.superVC.currentPage=1
                    self.superVC.resourceData.removeAll()
                    var p:Dictionary<String,AnyObject>=["type":0 as AnyObject,"orderby":1 as AnyObject,"pageIndex":self.superVC.currentPage as AnyObject,"pageSize":10 as AnyObject]
                    if self.superVC.parameter != nil {
                        self.superVC.parameter!.updateValue(self.superVC.currentPage as AnyObject, forKey: "pageIndex")
                        p=self.superVC.parameter!
                    }
                    self.superVC.refreshLivesAction(parameters: p, completionHandler: { (success) in
                        if success{
                            self.superVC.tableView.reloadData()
                        }
                    })
                }
            }
        }
        AppDelegate.instance().httpServer.addHistoryView(parameters: ["f_ViewType":0 as AnyObject,
                                                                      "f_ViewId":item.f_Id as AnyObject,
                                                                      "f_ViewName":item.f_Title as AnyObject]) { (str, error) in
        }
    }
}