Swift基础之init方法,实例方法,类方法(静态方法)的使用(多标签Demo)
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)的更多相关文章
- Python Class 的实例方法/类方法/静态方法
实例方法.类方法.静态方法 class MyClass(object): class_name = "MyClass" # 类属性, 三种方法都能调用 def __init__(s ...
- Swift中的init方法
摘要:Swift有着超级严格的初始化方法,不仅强化了designated初始化方法的地位,所有不加修饰的init方法都需要在方法中确保非Optional的实例变量被赋值初始化,而在子类中,也强制调用s ...
- 面向对象~~类的成员: 私有成员,公有成员, 实例方法, 类方法, 静态方法, 属性(property), isinstance ,issubclass, 元类(type)
一 私有成员公有成员 公有成员: 在任何地方都能访问 私有成员: 只有在类的内部才能访问 类从加载时,只要遇到类中的私有成员,都会在私有成员前面加上_类名 二 实例方法 实例方法就是类的实例能够使用的 ...
- python基础2-静态方法和类方法
1. 类方法 是类对象所拥有的方法,需要用修饰器@classmethod来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数(当然可以用其他名称的变量作为其第一个参数,但是 ...
- Python的实例方法,类方法,静态方法之间的区别及调用关系
如果只看这个图,很多人可能会看的一头雾水,特别是学过完全面向对象语言的同学, Python 是双面向的,既可以面向函数编程,也可以面向对象编程,所谓面向函数就是单独一个. py 文件,里面没有类,全是 ...
- python中实例方法,类方法,静态方法简单理解
按照字面名称来理解的话: 实例方法就是实例化对象的方法,绑定在实例对象上 类方法就是类自己的方法,不需要实例化对象,类自己就是对象,直接绑定在类上 静态方法就是普通的函数,函数作为对象,不过是封装在类 ...
- Swift基础之Delegate方法的使用
本文简单介绍了使用Delegate方法的进行值的传递,改变上一个界面的字体大小和颜色 首先创建一个导航视图: let viewC = ViewController(); let navi ...
- Swift基础--Swift中的分类以及在分类中扩展init方法的注意事项
Swift中的分类 1.创建一个空的swift文件 2.关键字extension,格式: extension 要扩展的类名 {} extension UIButton { } Swift中扩展init ...
- python中的实例方法、静态方法、类方法、类变量和实例变量
class MyTest: myname = 'peter' # add a instance attribute def __init__(self, name): self.n ...
随机推荐
- [JLOI 2015]城池攻占
Description 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑士攻占 n 个城池. 这 n 个城池用 1 到 n 的整数表示.除 1 号城池外,城池 i 会受到另一座城池 fi 的管辖, ...
- [HNOI 2015]接水果
Description 风见幽香非常喜欢玩一个叫做 osu!的游戏,其中她最喜欢玩的模式就是接水果. 由于她已经DT FC 了The big black, 她觉得这个游戏太简单了,于是发明了一个更 ...
- [HEOI2015]兔子与樱花
Description 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号从0到n-1,这n个分叉点由n-1个树枝连接 ...
- [SDOI2017]新生舞会
Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买一个男生和一个女生一起跳舞,互为舞伴.Cathy收集了这些同学之间 ...
- [UOJ UR #2]树上GCD
来自FallDream的博客,未经允许,请勿转载,谢谢. 传送门 看完题目,一般人都能想到 容斥稳了 .这样我们只要统计有多少点对满足gcd是i的倍数. 考虑长链剖分,每次合并的时候,假设我已经求出轻 ...
- Unix系统的文件打开机构
当打开一个文件时,建立用户与该文件的联系.其实质是将该文件在辅存中的有关目录信息.辅存i节点及相应的文件地址索引表拷贝到主存中.文件系统中管理这一方面的机构成为打开文件管理机构,简称打开文件机构. 打 ...
- Unity脚本自动添加注释脚本及排版格式
Unity脚本自动添加注释脚本及头部注释排版格式 公司开发项目,需要声明版权所有,,,,标注公司名,作者,时间,项目名称及描述等等. 自己总结实现的现成脚本及头部注释排版文本,添加到模版即可. 文件不 ...
- 【实用】【移动端】Retain屏1px解决方案
新浪微博HTML5版 微博的实现方式(rem + 小数px) <meta name="viewport" content="width=device-width,i ...
- css3中-moz、-ms、-webkit各什么意思
1.-moz代表firefox浏览器私有属性 2.-ms代表ie浏览器私有属性 3.-webkit代表safari.chrome私有属性 这些是为了兼容老版本的写法,比较新版本的浏览器都支持直接写:b ...
- consul怎么在windows下安装
1.去官网下载:https://www.consul.io/downloads.html 2.解压: 3.设置环境变量:path添加 E:\programfiles\consul: 4.cmd启动: ...