В нашем приложении у нас есть светлый режим и темный режим, которые переключают цвета текста и фона. Theme
- это enum
с чехлами light
и dark
. У нас есть методы для переключения цветов, такие как:
var textColor: UIColor {
switch self {
case .light:
return UIColor(red:60/255.0, green:60/255.0, blue:60/255.0, alpha: 1.0)
case .dark:
return UIColor(red: 240.0/255.0, green: 248.0/255.0, blue: 255.0/255.0, alpha: 1.0)
}
}
И у нас есть метод apply
, который применяет тему ко всем представлениям, которые мы используем в нашем приложении:
func apply(){
defaults.set(rawValue, forKey: "selectedTheme")
UIApplication.shared.delegate?.window??.tintColor = tintColor
let navBarAppearance = UINavigationBar.appearance()
navBarAppearance.barStyle = barStyle
navBarAppearance.backgroundColor = backgroundColor
navBarAppearance.barTintColor = backgroundColor
navBarAppearance.tintColor = tintColor
navBarAppearance.isTranslucent = false
navBarAppearance.titleTextAttributes = [NSAttributedString.Key.foregroundColor: textColor]
let tabBarAppearance = UITabBar.appearance()
tabBarAppearance.barStyle = barStyle
tabBarAppearance.backgroundColor = backgroundColor
tabBarAppearance.barTintColor = backgroundColor
let toolBar = UIToolbar.appearance()
toolBar.backgroundColor = backgroundColor
toolBar.tintColor = backgroundColor
toolBar.barStyle = barStyle
toolBar.isTranslucent = false
toolBar.barTintColor = backgroundColor
UITableViewCell.appearance().backgroundColor = backgroundColor
UILabel.appearance(whenContainedInInstancesOf: [UITableViewCell.self]).textColor = textColor
UILabel.appearance().textColor = textColor
UITextField.appearance().keyboardAppearance = keyboardColor
UITextField.appearance().textColor = textColor
UITextField.appearance().backgroundColor = backgroundColor
UITextView.appearance().textColor = textColor
UITextView.appearance().backgroundColor = backgroundColor
MultiSelectSegmentedControl.appearance().tintColor = tintColor
MultiSelectSegmentedControl.appearance().backgroundColor = backgroundColor
UISegmentedControl.appearance().tintColor = tintColor
UISegmentedControl.appearance().backgroundColor = backgroundColor
UIButton.appearance().tintColor = tintColor
BigButton.appearance().backgroundColor = Theme.current.tintColor
BigButton.appearance().tintColor = Theme.current.backgroundColor
UIPickerView.appearance().backgroundColor = Theme.current.backgroundColor
UIPickerView.appearance().tintColor = Theme.current.tintColor
UITableView.appearance().backgroundColor = backgroundColor
UITableView.appearance().separatorColor = cellSelectionColor
UISearchBar.appearance().backgroundColor = backgroundColor
UISearchBar.appearance().barTintColor = tintColor
UISearchBar.appearance().searchBarStyle = .minimal
UITextView.appearance().backgroundColor = backgroundColor
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).textColor = textColor
UISwitch.appearance().onTintColor = tintColor
let colorView = UIView()
colorView.backgroundColor = cellSelectionColor
UITableViewCell.appearance().selectedBackgroundView = colorView
}
Когда кто-то выбирает текст в нашем приложении и нажимает кнопку «поиск» в пункте всплывающего меню, всплывающее окно выглядит правильно. Однако, когда вы щелкаете мышью по некоторым представлениям (например, по словарю и знаниям сири), фон или цвета текста, похоже, изменились. Пример:
Как мы можем контролировать цвет текста в этом всплывающем окне?
РЕДАКТИРОВАТЬ: цель состоит в том, чтобы найти имя объекта пользовательского интерфейса, который создается при нажатии UIMenuItems. Его нет ни в Инспекторе отладчика XCode, ни в self.view.subviews
. Кажется, это какой-то встроенный объект, который скрыт от остальных процессов.