自定义SDCAlertView

时间:2016-01-14 07:04:59

标签: swift ios9 uialertview sdcalertview

我正在使用SDCAlertView Cocoapod并尝试自定义alertview和actionsheet,以便更改cornerradius,actionViewSeparatorColor,默认textcolor和.Destructive textcolor,如下图所示:

我尝试按照github docs中的建议创建一个类型:

  

如果要查找更多自定义项,请创建一个符合VisualStyle的类型,并在AlertController实例上使用visualStyle。您还可以将DefaultVisualStyle子类化为一组默认值,然后可以根据需要覆盖它们。

但是没有运气。我希望你能提供一个如何做到这一点的例子吗?

这些是我想在pod中覆盖的三件事:

myActivityIndicator.stopAnimating()

为了回答你的问题,我在评论中尝试了这个:

  VisualStyle protocol extension:

   public var actionViewSeparatorColor: UIColor { return UIColor(red: 142/255.0, green: 54/255.0, blue: 65/255.0, alpha: 0.4) }


   public func textColor(forAction action: AlertAction?) -> UIColor {
        if action?.style == .Destructive {
            return Style.maincolor()
        } else {
            return Style.mainTextColor()
        }
    }

DefaultVisualStyle Class:

    public var cornerRadius: CGFloat {
        if #available(iOS 9, *) {
            return 6
        } else {
            return self.alertStyle == .Alert ? 6 : 4
        }
    }

然后我尝试通过以下方式在viewcontroller中创建警报时将其变为现实:

import UIKit
import SDCAlertView

public class AlertViewStyle: VisualStyle {

        private let alertStyle: AlertControllerStyle
init(alertStyle: AlertControllerStyle) { self.alertStyle = alertStyle }

            public var width: CGFloat { return self.alertStyle == .Alert ? 270 : 1 }

            public var cornerRadius: CGFloat {
                if #available(iOS 9, *) {
                    return 6
                } else {
                    return self.alertStyle == .Alert ? 6 : 4
                }
            }

            public var margins: UIEdgeInsets {
                if self.alertStyle == .Alert {
                    if #available(iOS 9, *) {
                        return UIEdgeInsets(top: 10, left: 0, bottom: 10, right: 0)
                    } else {
                        return UIEdgeInsetsZero
                    }
                } else {
                    if #available(iOS 9, *) {
                        return UIEdgeInsets(top: 30, left: 10, bottom: -10, right: 10)
                    } else {
                        return UIEdgeInsets(top: 10, left: 10, bottom: -8, right: 10)
                    }
                }
            }

            public var actionViewSize: CGSize {
                if #available(iOS 9, *) {
                    return self.alertStyle == .Alert ? CGSize(width: 90, height: 44) : CGSize(width: 90, height: 57)
                } else {
                    return CGSize(width: 90, height: 44)
                }
            }

            public func font(forAction action: AlertAction?) -> UIFont {
                switch (self.alertStyle, action?.style) {
                case (.Alert, let style) where style == .Preferred:
                    return UIFont.boldSystemFontOfSize(17)

                case (.Alert, _):
                    return UIFont.systemFontOfSize(17)

                case (.ActionSheet, let style) where style == .Preferred:
                    return UIFont.boldSystemFontOfSize(20)

                case (.ActionSheet, _):
                    return UIFont.systemFontOfSize(20)
                }
            }



            public func textColor(forAction action: AlertAction?) -> UIColor {

                if action?.style == .Destructive {
                    return Style.mainColour
                } else {
                    return Style.mainTextColour
                }

            }


         public var actionViewSeparatorColor: UIColor { return UIColor(red: 142/255.0, green: 54/255.0, blue: 65/255.0, alpha: 0.4) }


        }

我只是在玩耍。我尝试了很多不同的东西来尝试编译而没有运气。我从SDCAlertView github问题看到有人成功定制了警报和操作表视图。基于上面的代码,您对我应该如何进行有任何建议吗?

非常感谢任何见解。

非常感谢,

亚历

1 个答案:

答案 0 :(得分:0)

我在一位同事的帮助下想出了部分内容。创建AlertViewStyle类是正确的。

然后,当您在viewcontroller中创建警报时,请执行以下操作:

 //Create an alert
    let alert = AlertController(title: title, message: message, preferredStyle: .Alert)

 //And declare its style
        // for alertviews
        alert.visualStyle = AlertViewStyle(alertStyle: .Alert)

       // for actionsheets
        alert.visualStyle = AlertViewStyle(alertStyle: .ActionSheet)

 // Add actions and present...
        alert.addAction(AlertAction(title: "OK", style: .Default))

        alert.present()

这改变了操作表的所有内容,但对于警报视图,我仍然无法更改标题和邮件标签的字体或颜色。如果您对如何访问和自定义这方面有任何建议 - 这将是很好的。感谢。