美文网首页
个人Demo

个人Demo

作者: 菲特峰 | 来源:发表于2020-07-19 16:29 被阅读0次

主要用于快速搭建项目,平常用到的一些第三方和自己整理的一些UI控件,常用的功能模块等。

1. 创建桥接文件

https://www.jianshu.com/p/4da697a06ef0

2. 项目基础目录

image.png

3. base基类

BaseViewController

主要实现功能

  • 控制状态栏的颜色
  • 网络诊断
  • 返回按钮统样式和点击事件统一处理
  • 接收登录成功和退出等通知
  • 弹出窗信息统一处理
  • 空白图处理
//  BaseViewController.swift


import UIKit
import Reachability
@objc protocol BaseViewControllerDelegate {
    @objc optional func backController(controller:BaseViewController)
}

class BaseViewController: UIViewController,BaseViewControllerDelegate,DataHanderProtocol {
    
    //状态条(电池栏)颜色:计算属性
    override var preferredStatusBarStyle: UIStatusBarStyle{
        return .default//白色
    }

    let reachability = try! Reachability()

    weak var backDelegate:BaseViewControllerDelegate?
    lazy var backButton:UIButton = {
       let button = UIButton()
//       black_back
        button.setImage(UIImage.init(named: "black_back"), for: UIControl.State.normal)
        button.setImage(UIImage.init(named: "black_back"), for: UIControl.State.highlighted)
        button.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
        button.addTarget(self, action: #selector(backBtnClick(button:)), for: UIControl.Event.touchUpInside)
        button.contentEdgeInsets = UIEdgeInsets.init(top: 0, left: -20, bottom: 0, right: 0)
        return button
    }()
    

    override func viewDidLoad() {
        super.viewDidLoad()
        
        DLog("控制器\(String(describing: self))-------被加载")
            
//        self.navigationController?.navigationBar.isTranslucent = false

        view.backgroundColor = AppColor.vcBgColor

        //接受登录通知
        LFNotice.add(observer: self, selector: #selector(loginSuccess), notification: LFNotice.Notification.login)
        //接受退出通知
        LFNotice.add(observer: self, selector: #selector(loginOut), notification: LFNotice.Notification.loginOut)
        //接受是否重新登录通知
        LFNotice.add(observer: self, selector: #selector(needLogin), notification: LFNotice.Notification.needLogin)



    }
    
    //刷新数据
    @objc func refreshData(){
          
    }
    
    @objc private func needLogin(){
        
//        if self.navigationController?.isVisible == true  {
//            let vc = PXSLoginVC()
//            self.navigationController?.pushViewController(vc)
//
//        }

    }
    
    // 警告框,提示没有连接网络 *********************
    func alert_noNetwrok() {
        
        self.view.ly_emptyView = PXSEmptyView.diyNoNetworkEmptyWithTarget(target: self, action: #selector(refreshData))
        self.view.ly_showEmpty()
    }

    // 有网*********************
    func alert_Netwrok(){
        self.view.ly_hideEmpty()
    }

    
    deinit {
        
        DLog("控制器\(String(describing: self))-------被释放")
        reachability.stopNotifier()
        NotificationCenter.default.removeObserver(self, name: .reachabilityChanged, object: reachability)

        LFNotice.removeAll()
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        if self.isRootViewController() == false {
            self.backDelegate = self
            self.navigationItem.leftBarButtonItem  = UIBarButtonItem.init(customView: backButton)
        }
        
        NotificationCenter.default.addObserver(self, selector: #selector(reachabilityChanged(note:)), name: .reachabilityChanged, object: reachability)
        do{
            try reachability.startNotifier()
        }catch{
            print("could not start reachability notifier")
        }
        

        
    }
    
}

//MARK: - 接收通知
extension BaseViewController {
 

    @objc func loginSuccess(){
        
    }
    
    @objc func loginOut(){
        defaultUserInfo.token = nil
        LFSaveTool.remove(file: "LoginModel")
        
//           LFCache.removeObjectForKey(userModelKey)
//           LFCache.removeAllObjects()
    }
        
    @objc func reachabilityChanged(note: Notification) {

      let reachability = note.object as! Reachability

      switch reachability.connection {
      case .wifi:
          DLog("Reachable via WiFi")
        DispatchQueue.main.async {
            self.alert_Netwrok()
            
        }

      case .cellular:
          DLog("Reachable via Cellular")
        DispatchQueue.main.async {
            self.alert_Netwrok()
        }

      case .unavailable:
        DLog("Network not reachable")

        DispatchQueue.main.async { // 不加这句导致界面还没初始化完成就打开警告框,这样不行
            self.alert_noNetwrok() // 警告框,提示没有网络
        }
      case .none:
        DLog("")
        }
    }

}

//MARK: - 返回按钮
extension BaseViewController {
    func setWhiteNavBar(){
        self.navBarBackgroundAlpha = 0
        self.navBarBarTintColor = AppColor.white
        self.navBarTintColor = AppColor.black
        self.navBarTitleColor = AppColor.black
    }
    
    func setBlackNavBar(){
        self.navBarBackgroundAlpha = 0
        self.navBarBarTintColor = AppColor.white
        self.navBarTintColor = AppColor.white
        self.navBarTitleColor = AppColor.white

    }
    
    func isRootViewController()-> Bool {
        return self == self.navigationController?.viewControllers.first
    }
    
    @objc private func backBtnClick(button:UIButton){
        if self.backDelegate != nil {
            self.backDelegate?.backController?(controller: self)
        }
    }
    
    func backController(controller: BaseViewController) {
        self.navigationController?.popViewController(animated: true)
    }

}
//MARK: - Toast
extension BaseViewController {
    func lf_show(message:String) {
        self.view.makeToast(message, duration: 2.0, position: "CSToastPositionCenter")
    }
    
    func lf_showInWindown(message:String) {
        kkwindow?.makeToast(message, duration: 2.0, position: "CSToastPositionCenter")
    }
}


相关文章

  • 个人Demo

    github网址:MGDYZBMGMiaoBo由于ijkPlayer库比较大,下载需到百度云盘 一、MGDYZB ...

  • 个人Demo

    主要用于快速搭建项目,平常用到的一些第三方和自己整理的一些UI控件,常用的功能模块等。 1. 创建桥接文件 htt...

  • iOS 平常搜集和练手Demo

    测试Demo地址:CX/个人Demo

  • 项目展示DEMO,个人简历DEMO

  • 个人小Demo/收藏的Demo地址

    存一些自己写的Deme和一些看到的好用的Demo到自己的GitHub上,以备不时之需,如果有侵犯大神的权益请联系鄙...

  • iOS-Demo相关

    Demo文集涵盖实用性Demo、外加高仿程序. 1.iOS之选择汽车品牌小demo2.个人demo仿斗鱼、喵播、自...

  • iOS 设计模式之MVVM

    先借鉴一个demo,看完demo,基本上就大概理解是什么意思了,demo地址:MVVMDemo 只是个人的一点理解...

  • 写一个简历demo

    完成如下作品展示页面 demo1 完成如下个人简历页面 resumeflex-demo

  • 个人收集的知识、Demo

    【链接】[2016-06-28更新]Apple公司开发者账号&邓白氏 http://www.jianshu.com...

  • three.js入门 DEMO

    css与js结合完成动画效果 入门 DEMO 二十面体 DEMO 我的个人博客,有空来坐坐

网友评论

      本文标题:个人Demo

      本文链接:https://www.haomeiwen.com/subject/lhzlkktx.html