2015-08-11 11 views
0

У меня есть MKMap в моем ViewController, и я разрешаю своим пользователям переключаться между типами карт между «Стандартным», «Гибридным» и «Спутником» - как и в приложении «Карты». Как и в приложении для карт, у меня есть нижняя панель, а затем у меня есть панель навигации вверху. Когда пользователь переключается между типами карт, полоски должны переключаться на черный фон с белыми кнопками для «Гибридных» и «Спутников», а белый фон с синими кнопками «Стандарт».Изменение цвета панели навигации в Swift

У меня есть нижние полосы, меняющие цвета . правильно, но я не в состоянии получить навигационную панель, чтобы изменить на всех Вот моя функция, когда пользователь изменяет типы карт:

func changeMapType(sender:UISegmentedControl){ 
    if mapType.selectedSegmentIndex == 0{ 
     mapView.mapType = MKMapType.Standard 
     toolbar.barTintColor = UIColor(red:1.0, green:1.0, blue:1.0, alpha:1.0) 
     toolbar.tintColor = UIColor(red:0.0, green:122.0/255.0, blue:1.0, alpha:1.0) 
     self.navigationController?.navigationBar.translucent = false 
     self.navigationController?.navigationBar.barTintColor = UIColor(red:1.0, green:1.0, blue:1.0, alpha:1.0) 
     self.navigationController?.navigationBar.tintColor = UIColor(red:0.0, green:122.0/255.0, blue:1.0, alpha:1.0) 

     defaults.setValue("Standard", forKey: "initialMapType") 
    } 
    else if mapType.selectedSegmentIndex == 1{ 
     mapView.mapType = MKMapType.Hybrid 
     toolbar.barTintColor = UIColor.blackColor() 
     toolbar.tintColor = UIColor.whiteColor() 
     self.navigationController?.navigationBar.translucent = false 
     self.navigationController?.navigationBar.barTintColor = UIColor.blackColor() 
     self.navigationController?.navigationBar.tintColor = UIColor.whiteColor() 

    defaults.setValue("Hybrid", forKey: "initialMapType") 

} 
else if mapType.selectedSegmentIndex == 2{ 
    mapView.mapType = MKMapType.Satellite 
    toolbar.barTintColor = UIColor.blackColor() 
    toolbar.tintColor = UIColor.whiteColor() 
    self.navigationController?.navigationBar.translucent = false 
    self.navigationController?.navigationBar.barTintColor = UIColor.blackColor() 
    self.navigationController?.navigationBar.tintColor = UIColor.whiteColor() 

    defaults.setValue("Satellite", forKey: "initialMapType") 
} 

}

кто-нибудь знает, что я должен делать по-другому, чтобы получить мой СЧА бар для изменения цвета?

+1

Вы говорите, что у вас есть панель навигации. Но вы на самом деле внутри навигационного контроллера? – matt

+0

Да, я внутри контроллера навигации. –

+0

Попробуй это http://stackoverflow.com/questions/31846263/how-to-change-the-font-and-text-color-of-the-title-of-uinavigationbar – Laky

ответ

1

Это очень вероятно, потому что ваш self.navigationController пуст. Попробуйте это первым! Это очень распространенная проблема. Возможно, вы вызываете его из неправильного контроллера, который на самом деле не имеет NC. Вы можете обойти эту проблему с помощью интерфейса .appearance(), например:

Чтобы изменить цвет бар оттенок (фон панели навигации):

UINavigationBar.appearance().barTintColor = UIColor.whiteColor() 

Чтобы изменить цвет текста:

UINavigationBar.appearance().titleTextAttributes = [UITextAttributeTextColor: UIColor.whiteColor()] 

Помните, что это изменяет навигационную панель для всего приложения (в основном, внешний вид - способ изменения настройки по умолчанию), поэтому это может быть некорректно. Если вам интересно, здесь вы можете read more about appearance.

Надеюсь, это поможет!

Редактировать: Простой способ проверки пустого контроллера навигации будет принудительно разворачивать переменную self.navigationController! .navigationBar вместо?, Если ваше приложение выходит из строя, ваша проблема лежит здесь (но никому не говорите Я предположил, что, поскольку это не очень гладкое решение, как найти проблему, хотя быстрая)

+0

Да, это была проблема с моей NC. У меня как-то был контроллер навигации внутри другого навигационного контроллера, и именно это и вызывало мою проблему. Я удалил его, и теперь он отлично работает. Большое спасибо за Вашу помощь! –