Xcode更新过后,有些方法都进行了改变,Demo中有变化的都进行了简单的标记,具体以后遇见再说

创建一个UIView类,用init方法创建两种类型,显示多标签,创建静态方法进行调用,创建类方法进行调用

首先代码:用init方法创建两种类型,显示多标签

//初始化数组中是NSString类型的标签视图
    init(frame: CGRect,textArray aArray:NSArray,textFont aFont:UIFont){
        super.init(frame: frame);
        
        //首先获取宽、高,确定显示的位置
        let widthF:CGFloat = frame.size.width;
        //然后创建标签视图,注意:这个方法传过来的数组中就是NSString类型,可以直接显示
        var labelWidthF:CGFloat = 0.0;
        var labelHeightF:CGFloat = 0.0;
        for i in 0...aArray.count-1 {
            //获取内容大小
            let str = aArray[i] as! String;
            let strSize:CGSize = self.sizeWithFont(content: str as NSString , font: aFont, maxSize: CGSize.init(width: CGFloat(MAXFLOAT), height:CGFloat(MAXFLOAT)));
            //判断宽、高
            if widthF < labelWidthF+strSize.width+20 {
                labelWidthF = 0.0;
                labelHeightF = labelHeightF+strSize.height+20;
            }
            //创建Lable
            let labelL = UILabel.init(frame: CGRect.init(x: labelWidthF, y: labelHeightF, width: strSize.width+20, height: strSize.height+20));//CG系列变化了,没有了make,而是init
            labelL.text = str as String;
            labelL.textAlignment = NSTextAlignment.center;
            labelL.backgroundColor = UIColor.lightGray;//UIColor变化了,少了color
            labelL.font = aFont;
            self.addSubview(labelL);
            
            labelWidthF = labelWidthF+strSize.width+20;
        }
    }
    //初始化数组中是NSDictionary类型的标签视图
    init(frame: CGRect, textArray aArray:NSArray, keyStr aKeyStr:String, textFont aFont:UIFont){
        super.init(frame: frame);
        
        //首先获取宽、高,确定显示的位置
        let widthF:CGFloat = frame.size.width;
        //然后创建标签视图,注意:这个方法传过来的数组中是NSDictionary
        var labelWidthF:CGFloat = 0.0;
        var labelHeightF:CGFloat = 0.0;
        for i in 0...aArray.count-1 {
            //获取内容大小
            let dic:NSDictionary = aArray[i] as! NSDictionary;
            let str = dic[aKeyStr] as! String;
            let strSize:CGSize = self.sizeWithFont(content: str as NSString, font: aFont, maxSize: CGSize.init(width: CGFloat(MAXFLOAT), height:CGFloat(MAXFLOAT)));
            //判断宽、高
            if widthF < labelWidthF+strSize.width+20 {
                labelWidthF = 0.0;
                labelHeightF = labelHeightF+strSize.height+20;
            }
            //创建Lable
            let labelL = UILabel.init(frame: CGRect.init(x: labelWidthF, y: labelHeightF, width: strSize.width+20, height: strSize.height+20));//CG系列变化了,没有了make,而是init
            labelL.text = str as String;
            labelL.textAlignment = NSTextAlignment.center;
            labelL.backgroundColor = UIColor.lightGray;//UIColor变化了,少了color
            labelL.font = aFont;
            self.addSubview(labelL);
            
            labelWidthF = labelWidthF+strSize.width+20;
        }
    }

创建实例方法获取字符串大小

//创建实例方法
    func sizeWithFont(content:NSString,font aFont:UIFont,maxSize aMaxSize:CGSize) -> CGSize {
        let attrs:NSDictionary = [NSFontAttributeName : aFont];
        return content.boundingRect(with: aMaxSize, options: NSStringDrawingOptions.usesLineFragmentOrigin, attributes: attrs as? [String : Any], context: nil).size;
    }

创建一个类方法(静态方法)

//创建类方法(静态方法)
    class func oneLabel(myLabel:UILabel) {
        myLabel.layer.cornerRadius = 5;
        myLabel.layer.borderColor = UIColor.blue.cgColor;
        myLabel.layer.borderWidth = 1;
        myLabel.clipsToBounds = true;
        myLabel.adjustsFontSizeToFitWidth = true;
    }

利用类方法创建一个Label

//创建一个Label
        let myLabel = UILabel.init(frame: CGRect.init(x: 50, y: 320, width: 200, height: 50));
        myLabel.text = "这是一个类方法设计的Lable";
        BHMoreLabelView.oneLabel(myLabel: myLabel);
        self.view.addSubview(myLabel);

有问题请留言。。。。。。。源码下载:http://download.csdn.net/detail/hbblzjy/9665255

Swift基础之init方法,实例方法,类方法(静态方法)的使用(多标签Demo)的更多相关文章

  1. Python Class 的实例方法/类方法/静态方法

    实例方法.类方法.静态方法 class MyClass(object): class_name = "MyClass" # 类属性, 三种方法都能调用 def __init__(s ...

  2. Swift中的init方法

    摘要:Swift有着超级严格的初始化方法,不仅强化了designated初始化方法的地位,所有不加修饰的init方法都需要在方法中确保非Optional的实例变量被赋值初始化,而在子类中,也强制调用s ...

  3. 面向对象~~类的成员: 私有成员,公有成员, 实例方法, 类方法, 静态方法, 属性(property), isinstance ,issubclass, 元类(type)

    一 私有成员公有成员 公有成员: 在任何地方都能访问 私有成员: 只有在类的内部才能访问 类从加载时,只要遇到类中的私有成员,都会在私有成员前面加上_类名 二 实例方法 实例方法就是类的实例能够使用的 ...

  4. python基础2-静态方法和类方法

    1. 类方法 是类对象所拥有的方法,需要用修饰器@classmethod来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数(当然可以用其他名称的变量作为其第一个参数,但是 ...

  5. Python的实例方法,类方法,静态方法之间的区别及调用关系

    如果只看这个图,很多人可能会看的一头雾水,特别是学过完全面向对象语言的同学, Python 是双面向的,既可以面向函数编程,也可以面向对象编程,所谓面向函数就是单独一个. py 文件,里面没有类,全是 ...

  6. python中实例方法,类方法,静态方法简单理解

    按照字面名称来理解的话: 实例方法就是实例化对象的方法,绑定在实例对象上 类方法就是类自己的方法,不需要实例化对象,类自己就是对象,直接绑定在类上 静态方法就是普通的函数,函数作为对象,不过是封装在类 ...

  7. Swift基础之Delegate方法的使用

    本文简单介绍了使用Delegate方法的进行值的传递,改变上一个界面的字体大小和颜色 首先创建一个导航视图: let viewC = ViewController();        let navi ...

  8. Swift基础--Swift中的分类以及在分类中扩展init方法的注意事项

    Swift中的分类 1.创建一个空的swift文件 2.关键字extension,格式: extension 要扩展的类名 {} extension UIButton { } Swift中扩展init ...

  9. python中的实例方法、静态方法、类方法、类变量和实例变量

    class MyTest: myname = 'peter' # add a instance attribute    def __init__(self, name):        self.n ...

随机推荐

  1. [BZOJ 4916]神犇和蒟蒻

    Description 很久很久以前,有一只神犇叫yzy; 很久很久之后,有一只蒟蒻叫lty; Input 请你读入一个整数N;1<=N<=1E9,A.B模1E9+7; Output 请你 ...

  2. [SDOI2017]序列计数

    题目描述 Alice想要得到一个长度为nn的序列,序列中的数都是不超过mm的正整数,而且这nn个数的和是pp的倍数. Alice还希望,这nn个数中,至少有一个数是质数. Alice想知道,有多少个序 ...

  3. Chtholly Nota Seniorious

    题目背景 大样例下发链接: https://pan.baidu.com/s/1nuVpRS1 密码: sfxg こんなにも.たくさんの幸せをあの人に分けてもらった だから.きっと 今の.私は 谁が何と ...

  4. GCD(ZYYS)

    [问题描述]在山的那边.海的那边有 n 个小矮人,他们生存的意义就是要保护他们的精神领袖——GCD.有一天,他们收到了一封恐吓信,说要在一个遥远的地方用维纳斯之箭射击 GCD,让他变成一根面条,n 个 ...

  5. Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined)

    运气好,分到的房里我最先开始Hack C题,Hack了12个,听说F题沙雕莫队但我不会,最后剩不到15分钟想出E题做法打了一波结果挂了,最后虽然上分了但总有点不甘心. 最后A掉ABCD Hack+12 ...

  6. [bzoj1187][HNOI2007]神奇游乐园

    来自FallDream的博客,未经允许,请勿转载,谢谢, 经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回.在返回的途中,小P发现在漫无边际的沙漠中,有一块狭长的绿地特别显眼.往下仔细一看,才发现这是一 ...

  7. bzoj2655calc 容斥+dp

    2655: calc Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 322  Solved: 197[Submit][Status][Discuss] ...

  8. Thinkphp中的U函数(Thinkphp3.2.3版本)

    U函数的作用是根据当前的URL设置生成对应的URL地址,使用U函数可以确保项目在移植过程中不受环境的影响. U方法的定义规则如下(方括号内参数根据实际应用决定): U('地址表达式',['参数'],[ ...

  9. Python 中的 if __name__ == '__main__' 该如何理解

    __name__ 表示当前模块名, __main__ 表示正在运行的模块名. if __name__ == '__main__' 这句话的意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导 ...

  10. Python作业之购物车

    作业之购物车 购物车的要求如下: 输入总金额 选择购买的商品,金额足够时,把选择的商品添加到购物车,金额不足时,进行提示,商品将不会添加到购物车 随时可以退出程序,同时输出已购买的商品 具体代码如下: ...