我是使用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
答案 0 :(得分:2)
一些选项:
自己遍历它们:
myButtons.forEach { $0.layer.cornerRadius = 10 }
使用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.您可以更改UIView
,UIButton
,UITexfield
的拐角半径,边框宽度,边框颜色。尝试使用此方法。
希望这种方法也有帮助。
答案 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