我正在使用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问题看到有人成功定制了警报和操作表视图。基于上面的代码,您对我应该如何进行有任何建议吗?
非常感谢任何见解。
非常感谢,
亚历
答案 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()
这改变了操作表的所有内容,但对于警报视图,我仍然无法更改标题和邮件标签的字体或颜色。如果您对如何访问和自定义这方面有任何建议 - 这将是很好的。感谢。