http://blog.csdn.net/syg90178aw/article/details/47020097
自定义view
(一)常用的写法
[objc] view plain copy //自定义view importUIKit privateletKLmargin:CGfloat=10 KLLabelHeight:CGfloat=30 classCustomVIEw:UIVIEw{ //闭包类似oc中的block varbuttonCallBack:(()->())? //重写init方法 overrIDeinit(frame:CGRect){ super.init(frame:frame) self.backgroundcolor=UIcolor.orangecolor() letlable:UILabel=UILabel(frame:CGRectMake(KLmargin,KLmargin,KLScreenWIDth-(22*KLmargin),KLLabelHeight)) lable.text="我丫就是一label" lable.textAlignment=NSTextAlignment.Center lable.backgroundcolor=UIcolor.lightGraycolor() self.addSubvIEw(lable) letbutton:UIbutton=UIbutton.buttonWithType(UIbuttonType.Custom)as!UIbutton button.frame=CGRectMake(KLmargin,CGRectGetMaxY(lable.frame)+KLmargin,KLLabelHeight) button.backgroundcolor=UIcolor.lightTextcolor() button.setTitle("俺是个按钮啊",forState:UIControlState.normal) button.addTarget(self,0); background-color:inherit">action:Selector("buttonCllick:"),0); background-color:inherit">forControlEvents:UIControlEvents.touchUpInsIDe) button.layer.cornerRadius=5 button.clipsToBounds=true self.addSubvIEw(button) } //反正重写了init方法这个会根据提示自动蹦出来 requiredinit(coderaDecoder:NSCoder){ fatalError("init(coder:)hasnotbeenimplemented") } //按钮点击事件的调用 funcbuttonCllick(button:UIbutton){ ifbuttonCallBack!=nil{ buttonCallBack!() //重新绘制和oc里面效果一样(其实我也不是很明白) overrIDefuncdrawRect(rect:CGRect){ //self.backgroundcolor=UIcolor.whitecolor() } 在其他类的调用
copy letcustomVIEw:CustomVIEw=CustomVIEw(frame:CGRectMake(0,80,KLScreenWIDth,KLScreenWIDth/2)) //闭包(block)的回调 customVIEw.buttonCallBack={()->()in customVIEw.removeFromSupervIEw() self.vIEw.addSubvIEw(customVIEw)
(二)在一开始的时候,我是写在drawRect里的,并没有重写init方法,发现也能实现效果 copy overrIDefuncdrawRect(rect:CGRect){ self.backgroundcolor=UIcolor.orangecolor() lable.text="我丫就是一label" lable.textAlignment=NSTextAlignment.Center lable.backgroundcolor=UIcolor.lightGraycolor() self.addSubvIEw(lable) button:UIbutton=UIbutton.buttonWithType(UIbuttonType.Custom)as!UIbutton button.frame=CGRectMake(KLmargin,KLLabelHeight) button.backgroundcolor=UIcolor.lightTextcolor() button.setTitle("俺是个按钮啊",0); background-color:inherit">forState:UIControlState.normal) button.addTarget(forControlEvents:UIControlEvents.touchUpInsIDe) button.layer.cornerRadius=5 button.clipsToBounds=true self.addSubvIEw(button) } 在其他类调用的时候,无法调用CustomVIEw(frame:rect) 这个方法,只有像下面的代码那样调用
copy customVIEw:CustomVIEw=CustomVIEw() customVIEw.backgroundcolor=UIcolor.orangecolor() customVIEw.frame=CGRectMake(0,KLScreenWIDth/2) customVIEw.buttonCallBack={()->()in customVIEw.removeFromSupervIEw() self.vIEw.addSubvIEw(customVIEw)
其实功能都能实现,但是毕竟drawRect只是绘制机制,控件的初始化,就不要在drawRect搞了,还是在init方法初始化吧 总结
以上是内存溢出为你收集整理的swift 自定义view的写法(内有仿照OC中block的 swift闭包的调用)全部内容,希望文章能够帮你解决swift 自定义view的写法(内有仿照OC中block的 swift闭包的调用)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)