如何将角半径设置为UIButtons的集合

时间:2019-03-27 01:11:41

标签: swift xcode

我是使用Xcode的新手。我的问题是关于“如何为UIButtons(集合)设置corner.Radius而不是按1进行1。一旦创建了集合,我将使用以下行:  self.myButtons.layer.cornerRadius = 10 但这是一个按钮。是否可以为按钮的“集合”执行此操作? enter image description here

非常感谢您的帮助。

@IBOutlet var myButtons: [UIButton]!

override func viewDidLoad() {
    super.viewDidLoad()

//加载视图后进行其他设置。

self.myButtons.layer.conerRadius = 10

5 个答案:

答案 0 :(得分:2)

一些选项:

  1. 自己遍历它们:

    myButtons.forEach { $0.layer.cornerRadius = 10 }
    
  2. 使用NSArray及其setValue(_:forKey:)

    (myButtons as NSArray).setValue(10, forKey: "cornerRadius")
    

我倾向于前者,但是后者是老的Objective-C方式(这就是为什么我们必须桥接到NSArray的原因)。


另一种方法是定义自己的UIButton子类,例如RoundedButton可以为您完成此任务。只需将IB中按钮的基类设置为自定义子类即可。

例如对于固定的拐角半径(您也可以在IB中右移):

@IBDesignable
class RoundedButton: UIButton {
    @IBInspectable var cornerRadius: CGFloat = 10 {
        didSet {
           layer.cornerRadius = cornerRadius
        } 
    }

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

    override init(frame: CGRect = .zero) {
        super.init(frame: frame)
        configure()
    }
}

private extension RoundedButton {
    func configure() {
        layer.cornerRadius = cornerRadius
    }
}

或者,如果要基于高度进行动态舍入:

@IBDesignable
class RoundedButton: UIButton {

    override func layoutSubviews() {
        super.layoutSubviews()

        let radius = min(bounds.width, bounds.height) / 2
        layer.cornerRadius = radius
    }

}

这种方法的优点在于,您可以看到在IB中呈现的圆形按钮。

答案 1 :(得分:0)

您可以在界面生成器中执行此操作。选择按钮,然后点击“身份检查器”(右侧的第3个标签)。在“用户定义的运行时属性”下,单击加号按钮。并输入layer.conerRadius作为键,并输入1作为值。这将通过KVO设置拐角半径。现在,您可以复制此按钮或使用alt + drag进行复制,并且副本还将具有角半径(请注意,该按钮不会显示在预览窗口中,但会在运行时显示)。

或者在代码中:

myButtons.forEach { button in
   button.layer.cornerRadius = 1
}

如果您使用的是插座集合,则可以在didSet中执行此操作,因为这将在iOS从笔尖文件/情节提要中设置插座时调用。

答案 2 :(得分:0)

按照以下步骤操作-

1。从对象库中选择UIButton

2。拖到您的情节提要

3。选择边框样式为无。

4。创建一个Swift文件并在扩展名下面添加- 扩展UIView {

@IBInspectable var cornerRadius: CGFloat {

    get {

        return layer.cornerRadius

    }

    set {

        layer.cornerRadius = newValue

        layer.masksToBounds = newValue > 0

    }

}

@IBInspectable var borderWidth: CGFloat {

    get {

        return layer.borderWidth

    }

    set {

        layer.borderWidth = newValue

    }

}

@IBInspectable var borderColor: UIColor? {

    get {

        return UIColor(cgColor: layer.borderColor!)

    }

    set {

        layer.borderColor = newValue?.cgColor

    }

}

}

扩展UIButton {

func roundedButton(){

    let maskPAth1 = UIBezierPath(roundedRect: self.bounds,

                                 byRoundingCorners: [.topLeft , .topRight],

                                 cornerRadii:CGSize(width:8.0, height:8.0))

    let maskLayer1 = CAShapeLayer()

    maskLayer1.frame = self.bounds

    maskLayer1.path = maskPAth1.cgPath

    self.layer.mask = maskLayer1

}

}

扩展名UITextField {

func setLeftPaddingPoints(_ amount:CGFloat){

    let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: amount, height: self.frame.size.height))

    self.leftView = paddingView

    self.leftViewMode = .always
}

func setRightPaddingPoints(_ amount:CGFloat) {
    let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: amount, height: self.frame.size.height))
    self.rightView = paddingView
    self.rightViewMode = .always
}

}

扩展名UITextField {

@IBInspectable var maxLength: Int {
    get {
        if let length = objc_getAssociatedObject(self, &kAssociationKeyMaxLength) as? Int {
            return length
        } else {
            return Int.max
        }
    }
    set {
        objc_setAssociatedObject(self, &kAssociationKeyMaxLength, newValue, .OBJC_ASSOCIATION_RETAIN)
        addTarget(self, action: #selector(checkMaxLength), for: .editingChanged)
    }
}

@objc func checkMaxLength(textField: UITextField) {
    guard let prospectiveText = self.text,
        prospectiveText.count > maxLength
        else {
            return
    }

    let selection = selectedTextRange

    let indexEndOfText = prospectiveText.index(prospectiveText.startIndex, offsetBy: maxLength)
    let substring = prospectiveText[..<indexEndOfText]
    text = String(substring)

    selectedTextRange = selection
}

} 5.现在,您可以从情节提要或代码中访问此扩展,以更改值并查看效果。 6.您可以更改UIViewUIButtonUITexfield的拐角半径,边框宽度,边框颜色。尝试使用此方法。 希望这种方法也有帮助。

答案 3 :(得分:0)

 /// Other way to set Corner radius of view; also inspectable from Storyboard.
public extension UIView {
@IBInspectable public var cornerRadius: CGFloat {
    get {
        return layer.cornerRadius
    }
    set {
        //            layer.masksToBounds = true
        layer.cornerRadius = abs(CGFloat(Int(newValue * 100)) / 100)
    }
}}

通过使用此功能,您可以从情节提要中设置边框半径

OR

for btn in yourbuttonCollectionName {btn.cornerRadius = 10.0}

答案 4 :(得分:0)

尝试一下: self.btn.layer.cornerRadius = 10