swift 自定义view的写法(内有仿照OC中block的 swift闭包的调用)

http://blog.csdn.net/syg90178aw/article/details/47020097

自定义view

(一)常用的写法

[objc] view plain copy
  1. //自定义view
  2. importUIKit
  3. privateletKLMargin:CGFloat=10
  4. KLLabelHeight:CGFloat=30
  5. classCustomView:UIView{
  6. //闭包类似oc中的block
  7. varbuttonCallBack:(()->())?
  8. //重写init方法
  9. overrideinit(frame:CGRect){
  10. super.init(frame:frame)
  11. self.backgroundColor=UIColor.orangeColor()
  12. letlable:UILabel=UILabel(frame:CGRectMake(KLMargin,KLMargin,KLScreenWidth-(22*KLMargin),KLLabelHeight))
  13. lable.text="我丫就是一label"
  14. lable.textAlignment=NSTextAlignment.Center
  15. lable.backgroundColor=UIColor.lightGrayColor()
  16. self.addSubview(lable)
  17. letbutton:UIButton=UIButton.buttonWithType(UIButtonType.Custom)as!UIButton
  18. button.frame=CGRectMake(KLMargin,CGRectGetMaxY(lable.frame)+KLMargin,KLLabelHeight)
  19. button.backgroundColor=UIColor.lightTextColor()
  20. button.setTitle("俺是个按钮啊",forState:UIControlState.normal)
  21. button.addTarget(self,0); background-color:inherit">action:Selector("buttonCllick:"),0); background-color:inherit">forControlEvents:UIControlEvents.TouchUpInside)
  22. button.layer.cornerRadius=5
  23. button.clipsToBounds=true
  24. self.addSubview(button)
  25. }
  26. //反正重写了init方法这个会根据提示自动蹦出来
  27. requiredinit(coderaDecoder:NSCoder){
  28. fatalError("init(coder:)hasnotbeenimplemented")
  29. }
  30. //按钮点击事件的调用
  31. funcbuttonCllick(button:UIButton){
  32. ifbuttonCallBack!=nil{
  33. buttonCallBack!()
  34. //重新绘制和oc里面效果一样(其实我也不是很明白)
  35. overridefuncdrawRect(rect:CGRect){
  36. //self.backgroundColor=UIColor.whiteColor()
  37. }
在其他类的调用
copy
    letcustomView:CustomView=CustomView(frame:CGRectMake(0,80,KLScreenWidth,KLScreenWidth/2))
  1. //闭包(block)的回调
  2. customView.buttonCallBack={()->()in
  3. customView.removeFromSuperview()
  4. self.view.addSubview(customView)

(二)在一开始的时候,我是写在drawRect里的,并没有重写init方法,发现也能实现效果
copy
    overridefuncdrawRect(rect:CGRect){
  1. self.backgroundColor=UIColor.orangeColor()
  2. lable.text="我丫就是一label"
  3. lable.textAlignment=NSTextAlignment.Center
  4. lable.backgroundColor=UIColor.lightGrayColor()
  5. self.addSubview(lable)
  6. button:UIButton=UIButton.buttonWithType(UIButtonType.Custom)as!UIButton
  7. button.frame=CGRectMake(KLMargin,KLLabelHeight)
  8. button.backgroundColor=UIColor.lightTextColor()
  9. button.setTitle("俺是个按钮啊",0); background-color:inherit">forState:UIControlState.normal)
  10. button.addTarget(forControlEvents:UIControlEvents.TouchUpInside)
  11. button.layer.cornerRadius=5
  12. button.clipsToBounds=true
  13. self.addSubview(button)
  14. }
在其他类调用的时候,无法调用CustomView(frame:rect) 这个方法,只有像下面的代码那样调用

copy
    customView:CustomView=CustomView()
  1. customView.backgroundColor=UIColor.orangeColor()
  2. customView.frame=CGRectMake(0,KLScreenWidth/2)
  3. customView.buttonCallBack={()->()in
  4. customView.removeFromSuperview()
  5. self.view.addSubview(customView)

其实功能都能实现,但是毕竟drawRect只是绘制机制,控件的初始化,就不要在drawRect搞了,还是在init方法初始化吧

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...