我关注this tutorial。在其AppDelegate中,它有一个customizeAppearance()
UISearchBar
& UINavigationBar
是类型/类属性。它们不应该是窗口或我们所在的当前viewController之类的属性吗?!我们怎样才能发布一个类,然后让它改变我们的UI?
FWIW,当我点击时...显然它只是把它带到了课程定义。
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var backgroundSessionCompletionHandler: (() -> Void)?
var window: UIWindow?
let tintColor = UIColor(red: 242/255, green: 71/255, blue: 63/255, alpha: 1)
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
customizeAppearance()
return true
}
func application(application: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler: () -> Void) {
backgroundSessionCompletionHandler = completionHandler
}
// MARK - App Theme Customization
private func customizeAppearance() {
window?.tintColor = tintColor
UISearchBar.appearance().barTintColor = tintColor // shouldn't UISearchBar be a property of some other object?
UINavigationBar.appearance().barTintColor = tintColor // shouldn't UINavigationBar be a property of some other object?
UINavigationBar.appearance().tintColor = UIColor.whiteColor()
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]
}
}
答案 0 :(得分:1)
(我将添加我的评论 - 回答OP关于班级自定义的问题 - 作为答案,因为评论不是持久的。可能OP自己可以添加一个替代的彻底答案,基于尝试评论中讨论的查询
引用the language reference for UISearchBar
:
自定义外观
您可以一次一个地自定义搜索栏的外观 可以使用外观代理(
[UISearchBar appearance]
)进行自定义 应用中所有搜索栏的外观。
覆盖外观代理,例如在UIKit User Interface Catalog - About Views:
的语言参考外观代理
您可以使用外观代理来设置特定外观 应用程序中所有视图实例的属性。对于 例如,如果您希望应用中的所有滑块都具有特定的滑块 最小跟踪色调颜色,您可以使用单个消息指定此项 到滑块的外观代理。
有两种方法可以自定义对象的外观:对于所有对象 实例和包含在实例中的实例 容器类。
...
使用
UIAppearance
协议获取a的外观代理 类。您可以自定义类实例的外观 将外观修改消息发送到班级的外观 代理。...
- 要自定义班级所有实例的外观,使用
appearance()
获取班级的外观代理。
在您所遵循的教程中,他们选择使用外观代理方法,在appearance()
协议中使用静态UIAppearance
方法作为蓝图(例如UISearchBar
通过UIView
继承符合}来从类级别获取和修改所有UISearchBar
(和UINavigationBar
)实例的外观代理。
以下博客文章介绍了外观代理的主题。一个有益的阅读,即使稍微过时并使用Obj-C而不是Swift: