使所有按钮都圆滑

时间:2016-01-14 18:29:33

标签: ios swift

使用swift 2,我尝试使用此代码使一个按钮四舍五入(并且它可以工作!):<​​/ p>

Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment;filename=" + HttpUtility.UrlEncode("Logs.xlsx", System.Text.Encoding.UTF8));

using (ExcelPackage pck = new ExcelPackage())
{
    ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Logs");
    ws.Cells["A1"].LoadFromDataTable(dt, true);                 
    var ms = new System.IO.MemoryStream();
    pck.SaveAs(ms);
    ms.WriteTo(Response.OutputStream);  
}

不幸的是,我有很多按钮,我想知道是否有办法让所有按钮都圆整,而不是每次都复制和粘贴上面的代码。

5 个答案:

答案 0 :(得分:13)

您可以通过UIAppearance执行此操作,SO question是一个代理,允许您为UIKit类的所有对象配置属性。

首先,由于UIAppearance适用于UIView本身的属性,而您想控制的属性位于按钮层,因此您需要将其公开为外观:

extension UIButton {
    dynamic var borderColor: UIColor? {
        get {
            if let cgColor = layer.borderColor {
                return UIColor(CGColor: cgColor)
            }
            return nil
        }
        set { layer.borderColor = newValue?.CGColor }
    }
    dynamic var borderWidth: CGFloat {
        get { return layer.borderWidth }
        set { layer.borderWidth = newValue }
    }
    dynamic var cornerRadius: CGFloat {
        get { return layer.cornerRadius }
        set { layer.cornerRadius = newValue }
    }
}
<{1>}在Swift中,dynamic关键字指示编译为属性生成getter和setter,以便UIAppearance将其标识为可配置,(请参阅此Apple's documentation ,以及{{3}}了解更多详情。)

然后,您可以在UIButton类的ui外观上设置属性:

UIButton.appearance().borderColor = UIColor.grayColor();
UIButton.appearance().borderWidth = 2;
UIButton.appearance().cornerRadius = 20;

您应该在应用程序启动期间进行配置,因为在将视图添加到窗口时应用了外观更改(请参阅UIAppearance文档中的注释)。

如果您只想为类中的某些按钮提供这些默认属性,则可以继承UIButton,并使用该类的外观而不是UIButton。例如:

class MyButton: UIButton {}

...

MyButton.appearance().borderColor = UIColor.grayColor();
MyButton.appearance().borderWidth = 2;
MyButton.appearance().cornerRadius = 20;

仅将样式应用于MyButton类的按钮。这允许您通过简单地继承UIButton并处理子类的外观来为类中的按钮定义不同的外观和感觉。

答案 1 :(得分:1)

你应该继承UIbutton。在您的子类中,覆盖awakeFromNib并将代码粘贴到那里。在Storyboard中,当您引用按钮时,打开助理编辑器并选择第三个选项卡。您可以在此处提供自定义类名。

答案 2 :(得分:1)

使用此代码将故事板插座作为属性

extension UIView {
@IBInspectable var cornerRadius: CGFloat
    {
    get {
        return layer.cornerRadius
    }
    set {
        layer.cornerRadius = newValue
        layer.masksToBounds = newValue > 0
    }
}
@IBInspectable var cornerWidth: CGFloat
    {
    get {
        return layer.borderWidth
    }
    set {
        layer.borderWidth = newValue
    }
}
@IBInspectable var borderColor: UIColor
    {
    set{ self.layer.borderColor = newValue.cgColor }
    get{ return UIColor(cgColor: self.layer.borderColor!) }
}

}

答案 3 :(得分:0)

选择按钮并转到Identity inspector,单击用户定义的运行时属性编辑器左下角的Add button (+)。双击新属性的Key Path field,将属性的关键路径编辑为layer.cornerRadius将类型设置为Number,将值设置为8。要从方形按钮制作圆形按钮,半径设置为按钮宽度的一半。或者您可以添加此代码,我发现第一种方法更容易,但您可以决定使用哪种代码。

button.layer.borderWidth = 2
button.layer.cornerRadius = 8
button.clipsToBounds = true

答案 4 :(得分:0)

使用此功能,您可以应用于所有按钮。 复制/粘贴到您的帮助程序并使用。

您可以从故事板中修改按钮。只需将此类添加到任何按钮。 (将此类添加到故事板中的任何按钮) enter image description here

@IBDesignable
class RoundedButton: UIButton {

    override func awakeFromNib() {
        super.awakeFromNib()

        layer.cornerRadius = frame.size.height / 2
        clipsToBounds = true
        imageView?.contentMode = .scaleAspectFit
    }

    @IBInspectable var borderWidth: CGFloat = 0 {
        didSet {
            layer.borderWidth = borderWidth
        }
    }

    @IBInspectable var borderColor: UIColor? {
        didSet {
            layer.borderColor = borderColor?.cgColor
        }
    }

    @IBInspectable var bgColor: UIColor? {
        didSet {
            backgroundColor = bgColor
        }
    }

    override var isHighlighted: Bool {
        didSet {
            if isHighlighted{
                backgroundColor = backgroundColor?.alpha(0.6)
            }else{
                backgroundColor = backgroundColor?.alpha(1)
            }
        }
    }
}