定制UISearchBar& amp; AppDelegate中的UINavigationBar?为什么要在类而不是实例级别进行自定义

时间:2016-12-25 20:31:42

标签: ios swift uinavigationbar uisearchbar

我关注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()]
  }
}

1 个答案:

答案 0 :(得分:1)

(我将添加我的评论 - 回答OP关于班级自定义的问题 - 作为答案,因为评论不是持久的。可能OP自己可以添加一个替代的彻底答案,基于尝试评论中讨论的查询

引用the language reference for UISearchBar

  

自定义外观

     

您可以一次一个地自定义搜索栏的外观   可以使用外观代理[UISearchBar appearance])进行自定义   应用中所有搜索栏的外观。

覆盖外观代理,例如在UIKit User Interface Catalog - About Views

  

外观代理

     

您可以使用外观代理来设置特定外观   应用程序中所有视图实例的属性。对于   例如,如果您希望应用中的所有滑块都具有特定的滑块   最小跟踪色调颜色,您可以使用单个消息指定此项   到滑块的外观代理。

     

有两种方法可以自定义对象的外观:对于所有对象   实例和包含在实例中的实例   容器类。

     

...

以及UIAppearance protocol

的语言参考
  

使用UIAppearance协议获取a的外观代理   类。您可以自定义类实例的外观   将外观修改消息发送到班级的外观   代理。

     

...

     
      
  • 要自定义班级所有实例的外观,使用appearance()获取班级的外观代理
  •   

在您所遵循的教程中,他们选择使用外观代理方法,在appearance()协议中使用静态UIAppearance方法作为蓝图(例如UISearchBar通过UIView继承符合}来从类级别获取和修改所有UISearchBar(和UINavigationBar)实例的外观代理。

以下博客文章介绍了外观代理的主题。一个有益的阅读,即使稍微过时并使用Obj-C而不是Swift: