NowChatThemeable-Protokoll – iOS
Die NowChatThemeable das protokoll bietet Eigenschaften, mit denen Sie die Farben überschreiben können, die auf Chatseiten verwendet werden, die auf gehostet werden ServiceNow Instanz.
public protocol NowChatThemeable {
var color: NowChatColoring { get }
}
Die NowChatColoring protokoll enthält NowUIColoring. Diese Eigenschaft wird verwendet, um auf Standardfarbvariablen zu verweisen, die NowWebThemeable Kann verwenden.
Weitere Informationen zum Design der Anwenderoberfläche finden Sie unter Verwenden Sie NowUIColoring, um NowWebTheme und NowChatTheme zu gestalten Im Mobile SDK-Entwicklerleitfaden – iOS.
Definieren Sie ChatColors mithilfe von Standardfarben
/// Sample structure for using default colors that comes with Mobile SDK.
struct ChatColors: NowUIColoring {
}
Definieren Sie ChatColors mithilfe anwenderdefinierter Farben
/// Use Custom Colors with light theme
struct ChatColors: NowUIColoring {
private var defaultTheme: NowChatDefaultTheme {
NowChatDefaultTheme(nowUITheme: NowUIDefaultTheme())
}
var brand: UIColor {
lightBrand
}
var primary: UIColor {
lightPrimary
}
var secondary: UIColor {
lightSecondary
}
var textTertiary: UIColor {
lightTextTertiary
}
var destructive: UIColor {
lightDestructive
}
var textPrimary: UIColor {
lightTextPrimary
}
var textSecondary: UIColor {
lightTextSecondary
}
var textActionable: UIColor {
lightTextActionable
}
var screenHeaderText: UIColor {
lightScreenHeaderText
}
var backgroundPrimary: UIColor {
lightBackgroundPrimary
}
var backgroundSecondary: UIColor {
lightBackgroundSecondary
}
var backgroundTertiary: UIColor {
lightBackgroundTertiary
}
var backgroundPrimaryActionable: UIColor {
lightBackgroundPrimaryActionable
}
var backgroundSecondaryActionable: UIColor {
lightBackgroundSecondaryActionable
}
var brandBackground: UIColor {
lightBrandBackground
}
var linkPrimaryText: UIColor {
lightLinkPrimary
}
var linkSecondary: UIColor {
lightLinkSecondary
}
var separatorPrimary: UIColor {
lightSeparatorPrimary
}
var separatorTertiary: UIColor {
lightSeparatorTertiary
}
var borderTertiary: UIColor {
lightBorderTertiary
}
var shadow: UIColor {
lightShadow
}
var notification: UIColor {
lightNotification
}
var alertCritical0: UIColor {
lightAlertCritical0
}
var alertCritical3: UIColor {
lightAlertCritical3
}
// Light Colors
var lightBrand: UIColor { defaultTheme.color.nowUIColor.brand }
var lightPrimary: UIColor { defaultTheme.color.nowUIColor.primary }
var lightSecondary: UIColor { defaultTheme.color.nowUIColor.secondary }
var lightDestructive: UIColor { defaultTheme.color.nowUIColor.destructive }
var lightTextPrimary: UIColor { defaultTheme.color.nowUIColor.textPrimary }
var lightTextSecondary: UIColor { defaultTheme.color.nowUIColor.textSecondary }
var lightTextTertiary: UIColor { defaultTheme.color.nowUIColor.textTertiary }
var lightTextActionable: UIColor { defaultTheme.color.nowUIColor.textActionable }
var lightScreenHeaderText: UIColor { defaultTheme.color.nowUIColor.screenHeaderText }
var lightBackgroundPrimary: UIColor { defaultTheme.color.nowUIColor.backgroundPrimary }
var lightBackgroundSecondary: UIColor { defaultTheme.color.nowUIColor.backgroundSecondary }
var lightBackgroundTertiary: UIColor { defaultTheme.color.nowUIColor.backgroundTertiary }
var lightBackgroundPrimaryActionable: UIColor { defaultTheme.color.nowUIColor.backgroundPrimaryActionable
}
var lightBackgroundSecondaryActionable: UIColor { defaultTheme.color.nowUIColor.backgroundSecondaryActionable
}
var lightBrandBackground: UIColor { defaultTheme.color.nowUIColor.brandBackground }
var lightLinkPrimary: UIColor { defaultTheme.color.nowUIColor.linkPrimaryText }
var lightLinkSecondary: UIColor { defaultTheme.color.nowUIColor.linkSecondary }
var lightSeparatorPrimary: UIColor { defaultTheme.color.nowUIColor.separatorPrimary }
var lightSeparatorTertiary: UIColor { defaultTheme.color.nowUIColor.separatorTertiary }
var lightBorderTertiary: UIColor { defaultTheme.color.nowUIColor.borderTertiary }
var lightShadow: UIColor { defaultTheme.color.nowUIColor.shadow }
var lightNotification: UIColor { defaultTheme.color.nowUIColor.notification }
var lightAlertCritical0: UIColor { defaultTheme.color.nowUIColor.alertCritical0 }
var lightAlertCritical3: UIColor { defaultTheme.color.nowUIColor.alertCritical3 }
}Definieren Sie die ChatTheme-Struktur mit dem NowChatThemeable-Protokoll
struct CarrascoChatTheme: NowChatThemeable {
var color: NowChatColoring
struct Color: NowChatColoring {
var nowUIColor: NowUIColoring
var backgroundPrimary: UIColor
var backgroundSecondary: UIColor
var backgroundPrimaryActionable: UIColor
var backgroundSecondaryActionable: UIColor
var brandBackground: UIColor
var backgroundTertiary: UIColor
var separatorPrimary: UIColor
var separatorTertiary: UIColor
var borderTertiary: UIColor
var shadow: UIColor
var linkSecondary: UIColor
init(inputs: ChatColors) {
nowUIColor = ThemeColor(inputs)
backgroundPrimary = inputs.backgroundPrimary
backgroundSecondary = inputs.backgroundSecondary
backgroundTertiary = inputs.backgroundTertiary
backgroundPrimaryActionable = inputs.backgroundPrimaryActionable
backgroundSecondaryActionable = inputs.backgroundSecondaryActionable
brandBackground = inputs.brandBackground
separatorPrimary = inputs.separatorPrimary
separatorTertiary = inputs.separatorTertiary
borderTertiary = inputs.borderTertiary
shadow = inputs.shadow
linkSecondary = inputs.linkSecondary
}
}
init(chatColors: ChatColors) {
color = Color(inputs: chatColors)
}
}Instanziieren Sie das ChatTheme-Objekt, indem Sie ChatColor als Eingabe übergeben
let chatTheme = CarrascoChatTheme(chatColors: ChatColors())ChatTheme-Objekt an NowChatService.makeChatUI übergeben ()
func makeChatScreen() -> UIViewController? {
guard let chatService = chatService else { return nil }
let result = chatService.makeChatUI(theme: CarrascoChatTheme(chatColors: ChatColors()))
switch result {
case .success(let chatViewController):
return chatViewController
case .failure(let error):
debugPrint("Chat screen creation failed with error: \(error)")
return nil
}
}