自定义 UIView 类 - Swift

Posted

技术标签:

【中文标题】自定义 UIView 类 - Swift【英文标题】:Custom UIView Class - Swift 【发布时间】:2015-11-26 09:59:37 【问题描述】:

我已经建立了一个从底部出现并在一段时间后隐藏的视图,它运行良好,但我想在UIView 类中作为模态,我查看了互联网但我无法获得或了解如何做到这一点。

snake = UIView(frame: CGRect(x: 0 , y: self.view.frame.size.height-66, width: self.view.frame.size.width, height: 66))
snake.backgroundColor = UIColor(red: 50/255, green: 50/255, blue: 50/255, alpha: 1.0)


let label = UILabel(frame: CGRect(x: 12, y: 8, width: snake.frame.size.width-90, height: 50))
label.text = "Connection error please try again later!!"
label.textColor = UIColor.whiteColor()
label.numberOfLines = 0
label.font = UIFont.systemFontOfSize(14)
snake.addSubview(label)

let button = UIButton(frame: CGRect(x: snake.frame.size.width-87, y: 8, width: 86, height: 50))
button.setTitle("OK", forState: UIControlState.Normal)
button.setTitleColor(UIColor(red: 76/255, green: 175/255, blue: 80/255, alpha: 1.0), forState: UIControlState.Normal)
button.addTarget(self, action: "hideSnackBar:", forControlEvents: UIControlEvents.TouchUpInside)
snake.addSubview(button)
self.view.addSubview(snake)

我不知道如何从这个类开始,我正在使用它的框架以编程方式创建视图,我需要为按钮或标签设置属性,并从任何类创建视图。

class snake: UIView 


    override init (frame : CGRect) 
        super.init(frame : frame)

    

    convenience init () 
        self.init(frame:CGRect.zero)
    

    required init(coder aDecoder: NSCoder) 
        fatalError("This class does not support NSCoding")
    


【问题讨论】:

【参考方案1】:

代码:

 var label:UILabel!
var button:UIButton!

override init (frame : CGRect) 
    super.init(frame : frame)
    self.backgroundColor = UIColor(red: 50/255, green: 50/255, blue: 50/255, alpha: 1.0)


    label = UILabel(frame: CGRect(x: 12, y: 8, width: self.frame.size.width-90, height: 50))
    label.text = "Connection error please try again later!!"
    label.textColor = UIColor.whiteColor()
    label.numberOfLines = 0
    label.font = UIFont.systemFontOfSize(14)
    self.addSubview(label)

    button = UIButton(frame: CGRect(x: self.frame.size.width-87, y: 8, width: 86, height: 50))
    button.setTitle("OK", forState: UIControlState.Normal)
    button.setTitleColor(UIColor(red: 76/255, green: 175/255, blue: 80/255, alpha: 1.0), forState: UIControlState.Normal)
    button.addTarget(self, action: "hideSnackBar:", forControlEvents: UIControlEvents.TouchUpInside)
    self.addSubview(button)

并使用它:

let snakeView = snake(frame: CGRectMake(0 ,self.view.frame.size.height-66, self.view.frame.size.width, 66)))

并为蛇形视图设置数据:

snakeView.label.text = "hello"

但通常我会创建一个函数来更新视图数据:

func updateData(title:String)
    self.label.text = title

并在需要时调用它:

snake.updateData("hello")

P/s:如果你使用 xib,你必须实现 awakeFromNib 而不是 init。并使用 xib 创建蛇(记住为 xib 设置标识符:“snakeView”):

let snakeView = NSBundle.mainBundle().loadNibNamed("snakeView", owner: nil, options: nil)[0] as snakeView

【讨论】:

很好,但还有一个问题,如果我需要在需要使用视图时为标签设置属性,怎么可能?我需要一个二传手,但你能给我举个例子吗? @Nguyen Hoan 而不是一个类,如何将这段代码放入一个结构中? 由于是自定义的UIView,所以需要是类,而不是结构体。

以上是关于自定义 UIView 类 - Swift的主要内容,如果未能解决你的问题,请参考以下文章

自定义 UIView 不适合屏幕,Swift

Swift:以编程方式附加自定义 UIView

如何将额外的参数传递给自定义UIView类以便在swift中进行初始化

在 Swift 中动画自定义 UIView 属性

ViewController 操作后,Swift UIView 自定义视图不会更新

如何为 UIView 的自定义子类设置约束?