如何创建一个只有一个按钮的自定义UIView,然后可以在整个应用程序中使用它放置在不同的位置?

时间:2015-10-01 16:23:49

标签: ios swift uiview

我已经创建了一个圆形按钮,这是一个自定义UIView.Here的代码:

 class HelpTips: UIView {

weak var hotSpot: UIButton!

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

    let strongHotSpot = UIButton()
    hotSpot = strongHotSpot

    self.addSubview(strongHotSpot)
    hotSpotOne.translatesAutoresizingMaskIntoConstraints = false
    hotSpotOne.backgroundColor = UIColor.TRLMHelpTipYellowColor()
    hotSpotOne.layer.borderColor = UIColor.TRLMHelpTipStrokeColor().CGColor
    hotSpotOne.layer.borderWidth = 1

    let horizontalConstraint = NSLayoutConstraint(item: hotSpot, attribute: .Leading, relatedBy: .Equal, toItem: self, attribute: .Leading, multiplier: 1.0, constant: -1)
    let verticalConstraint = NSLayoutConstraint(item: hotSpot, attribute: .Top, relatedBy: .Equal, toItem: self, attribute: .Top, multiplier: 1.0, constant: 16)
    let widthConstraint = NSLayoutConstraint(item: hotSpot, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: 40)
    let heightConstraint = NSLayoutConstraint(item: hotSpot, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: 40)

    self.addConstraints([verticalConstraint, horizontalConstraint, widthConstraint, heightConstraint])

}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

}

现在,在整个应用程序中,在几个地方使用了相同的按钮,但它被放置在不同的位置。因此每个View Controller都将使用该UIView。 因此从技术上讲,按钮的外观保持不变,但该按钮的约束会根据其位置不断变化。我想在这里遵循DRY(不要重复自己)技巧。 我以前做过这种事情,但代码重复了几次并且效率不高。怎么去这个? 任何帮助表示赞赏。谢谢!

2 个答案:

答案 0 :(得分:0)

您可以创建自定义导航控制器并将视图存储为其中的属性。每个视图控制器都可以访问导航控制器,因此他们只需引用您需要使用视图的属性和时间。应该保持干燥。

答案 1 :(得分:0)

使用xib创建自定义视图。将您的UIButton添加为子视图。

This教程会有所帮助。