gpt4 book ai didi

swift - 自定义 SDCAlertView

转载 作者:行者123 更新时间:2023-11-28 08:48:01 24 4
gpt4 key购买 nike

我正在使用 SDCAlertView Cocoapod 并尝试自定义 alertview 和 actionsheet,以便 cornerradius、actionViewSeparatorColor、默认文本颜色和 .Destructive 文本颜色发生变化,如这些图像所示:

我已经尝试按照 github 文档中的建议创建一个类型:

If you are looking for more customizations, create a type that conforms to VisualStyle and use visualStyle on the AlertController instance. You can also subclass DefaultVisualStyle for a set of default values that you can then override as needed.

但是没有任何运气。我希望您能举例说明如何做到这一点?

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

  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
}
}

为了回答您的问题,在评论中,我尝试这样做:

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) }


}

然后我尝试通过以下方式在 View Controller 中创建警报时使它栩栩如生:

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

let alertStyle: AlertControllerStyle = ???

alert.visualStyle = AlertViewStyle(alertStyle)

我只是在玩。我尝试了一大堆不同的东西来尝试让它编译但没有运气。我从 SDCAlertView github 问题中看到有人已成功自定义警报和操作 TableView 。基于上面的代码,你对我应该如何进行有什么建议吗?

任何见解将不胜感激。

非常感谢,

亚历克西斯

最佳答案

在一位同事的帮助下,我想通了其中的一部分。创建 AlertViewStyle 类是正确的。

然后当您在 View Controller 中创建警报时,您将执行以下操作:

 //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()

这改变了操作表的所有内容,但对于警报 View ,我仍然无法更改标题和消息标签的字体或颜色。如果您对如何访问和自定义它有任何建议,那就太好了。谢谢。

关于swift - 自定义 SDCAlertView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34783527/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com