zoukankan      html  css  js  c++  java
  • swif开发之--协议的使用

    以前在oc构建的项目中,如果这个页面需要构建一些指定的页面,一般我会重新创建个集成与UIView的类,然后同时创建XXX.xib文件,然后直接在上面拖拽控件,非常快速,当然也可以手动布局!个人更喜欢可视化布局!

    在swift下,其实实现的逻辑也是一样的,布局风格也相仿,里面加了一个代理传值,

    具体代码如下:

    1,新建一个集成与UIView的类

    import UIKit
    
    //创建枚举
    enum ScoreType{
        case common //普通分数面板
        case best       //最高分数板
    }
    
    //代理协议的使用
    protocol ScoreViewProtocol{
        func changeScore(value s:Int)
    }
    
    class ScoreView: UIView,ScoreViewProtocol {
    
        var scoreLab:UILabel!
        
        let defaultFrame = CGRect(x:0,y:0,100,height:30)
        var stype:String!
        var score:Int = 0{
            didSet{
                //分数变化,标签内容也要变化
                scoreLab.text = "(String(describing: String(stype))):(score)"
            }
        }
        
        //传入分数面板的类型,用于控制标签的显示
        init (stype:ScoreType)
        {
            scoreLab = UILabel(frame:defaultFrame)
            scoreLab.textAlignment = .center
            super.init(frame:defaultFrame)
            self.stype = (stype == .common ? "我的":"你的")
            
            backgroundColor = UIColor.orange
            scoreLab.font = UIFont(name:"微软雅黑",size:16)
            scoreLab.textColor = UIColor.white
            self.addSubview(scoreLab)
        }
        
        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
        }
        
        //实现协议中的方法
        func changeScore(value s:Int)
        {
            score = s
        }
    
    }

    2,在vc里面具体调用

    var score:ScoreView!
    var bestscore:ScoreView!

    具体实现:

    func initScoreView(){
            score = ScoreView(stype:.common)
            score.frame.origin = CGPoint(x:50,y:80)
            score.changeScore(value: 0)
            self.view.addSubview(score)
            
            bestscore = ScoreView(stype:.best)
            bestscore.frame.origin.x = 170
            bestscore.frame.origin.y = 80
            bestscore.changeScore(value: 99)
            self.view.addSubview(bestscore)
        }

    效果如下:

    仅做记录

  • 相关阅读:
    struts传值方式ModelDriven的使用
    sql查询count 单独字段不同值
    图片-文件上传下载
    HTML 字符实体 < &gt: &等
    Validation failed for object='employee'. Error count: 1问题解决
    MySQL查询本周、上周、本月、上个月份数据的sql脚本
    React前端框架路由跳转,前端回车事件、禁止空格、提交方式等方法
    环境变量误删path找回方法与mysql基础命令
    树结构的控制
    数据库查询方法
  • 原文地址:https://www.cnblogs.com/hero11223/p/7607414.html
Copyright © 2011-2022 走看看