2016-08-24 11 views
0

어두운 모드 전환을 시도하고 있습니다. 이 자습서 (link)로 시작했지만 tabBar의 스타일을 변경할 수는 없습니다. navBar의 스타일은 변경되지만 tabBar는 그대로 유지됩니다.스위치가있는 UITabBar 스타일 변경

앱을 다시 시작하지 않고 TabBar의 모양을 변경하려면 어떻게해야합니까?

업데이트 # 1 : 여기에 내가 때 스위치의 상태가 변경 ThemeManager.applyTheme(.Dark || .Light) 전화

import UIKit 

enum Theme: Int { 
    case Light, Dark 

    var barStyle: UIBarStyle { 
     switch self { 
     case .Light: 
      return .Default 
     case .Dark: 
      return .Black 
     } 
    } 

    var backgroundColor: UIColor { 
     switch self { 
     case .Light: 
      return UIColor(red:0.95, green:0.95, blue:0.95, alpha:1.00) 
     case .Dark: 
      return UIColor(red:0.12, green:0.12, blue:0.12, alpha:1.00) 
     } 
    } 

    var cellBackgroundColor: UIColor { 
     switch self { 
     case .Light: 
      return UIColor(red:1.00, green:1.00, blue:1.00, alpha:1.00) 
     case .Dark: 
      return UIColor(red:0.15, green:0.15, blue:0.15, alpha:1.00) 
     } 
    } 

    var labelColor: UIColor { 
     switch self { 
     case .Light: 
      return UIColor(red:0.12, green:0.12, blue:0.12, alpha:1.00) 
     case .Dark: 
      return UIColor(red:0.99, green:0.99, blue:0.99, alpha:1.00) 
     } 
    } 

    var buttonColor: UIColor { 
     switch self { 
     case .Light: 
      return UIColor(red:0.22, green:0.59, blue:0.95, alpha:1.00) 
     case .Dark: 
      return UIColor(red:0.22, green:0.59, blue:0.95, alpha:1.00) 
     } 
    } 

    var separatorColor: UIColor { 
     switch self { 
     case .Light: 
      return UIColor(red:0.94, green:0.94, blue:0.94, alpha:1.00) 
     case .Dark: 
      return UIColor(red:0.22, green:0.22, blue:0.22, alpha:1.00) 
     } 
    } 

    var tintColor: UIColor { 
     switch self { 
     case .Light: 
      return UIColor(red:0.62, green:0.62, blue:0.62, alpha:1.00) 
     case .Dark: 
      return UIColor(red:0.50, green:0.50, blue:0.50, alpha:1.00) 
     } 
    } 
} 

class ThemeManager { 
    static func currentTheme() -> Theme { 
     if(NSUserDefaults.standardUserDefaults().boolForKey("darkMode")){ 
      return .Dark 
     } else { 
      return .Light 
     } 
    } 

    static func applyTheme(theme: Theme) { 
     if(theme == .Dark){ 
      NSUserDefaults.standardUserDefaults().setBool(true, forKey: "darkMode") 
     } else { 
      NSUserDefaults.standardUserDefaults().setBool(false, forKey: "darkMode") 
     } 
     NSUserDefaults.standardUserDefaults().synchronize() 

     let sharedApplication = UIApplication.sharedApplication() 
     sharedApplication.delegate?.window??.tintColor = theme.buttonColor 

     UINavigationBar.appearance().barStyle = theme.barStyle 
     UITabBar.appearance().barStyle = theme.barStyle 
     UITabBar.appearance().barTintColor = theme.labelColor 

     UINavigationBar.appearance().tintColor = theme.labelColor 

     UITableViewCell.appearance().backgroundColor = theme.cellBackgroundColor 

     UIStepper.appearance().tintColor = theme.tintColor 
     UIActivityIndicatorView.appearance().tintColor = theme.tintColor 

     UIButton.appearance().tintColor = theme.buttonColor 
     UILabel.appearance().textColor = theme.labelColor 
    } 
} 

를 사용하는 코드입니다.

+0

당신이 코드의 일부를 공유 할 수, 제발? –

+0

업데이트가 필요하면 알려주세요. – Dan

+0

문제는 코드가 괜찮습니다. 네비게이션 스택을 다시로드하기 만하면됩니다. 사용한 튜토리얼에서도 마찬가지입니다. 튜토리얼 코드에서 적용 스타일 코드 부분에서'dismiss()'를 제거하면 즉시 작동하지 않는다는 것을 알 수 있습니다. –

답변

0

UIAppearance 프록시는 새 초기화 된보기에만 영향을줍니다. 색상 및 스타일을 UIAppearance에 설정하면 이미 표시된보기에는 영향을 미치지 않습니다.

당신의 ViewController에서 수동으로 설정해야합니다 :

self.tabBarController?.tabBar.barStyle = .Black