У меня есть контроллер табличного представления с распознавателем жестов, который запускает NSNotificationCenter.defaultCenter().postNotificationName("DuskTheme", object: nil)
всякий раз, когда пользователь проводит пальцем вверх.
В функции viewDidLoad() у меня есть следующий наблюдатель: NSNotificationCenter.defaultCenter().addObserver(self, selector: "dusk:", name:"DuskTheme", object: nil)
, который вызывает функцию dusk(notification: NSNotification)
, которая изменяет цвет элементов на текущем контроллере представления (т.е. теме).
Я также хотел изменить цвет моей панели навигации всякий раз, когда пользователь проводит пальцем по экрану, поэтому я создал подкласс для navigationController и добавил следующий наблюдатель к его viewDidLoad(): NSNotificationCenter.defaultCenter().addObserver(self, selector: "dusk:", name:"DuskTheme", object: nil)
, а также функцию dusk(notification: NSNotification)
, содержащую новый цвет для панели навигации, которую я связал из раскадровки.
Вот мой пользовательский класс контроллера навигации:
class customNavigationController: UINavigationController {
@IBOutlet weak var featuredNavBar = ThemeManager.navigationbar
override func viewDidLoad() {
super.viewDidLoad()
//Adding a theme notification observer
NSNotificationCenter.defaultCenter().addObserver(self, selector: "dusk:", name:"DuskTheme", object: nil)
func dusk(notification: NSNotification) {
UIView.animateWithDuration(1, animations: {
UIApplication.sharedApplication().statusBarStyle = .LightContent
self.featuredNavBar?.barTintColor = UIColor(red: 69/255, green: 69/255, blue: 69/255, alpha: 1)
})
}
}
}
Теперь по какой-то причине всякий раз, когда контроллер табличного представления прокручивается, приложение выдает следующее исключение:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[TestApp.customNavigationController dusk:]: unrecognized selector sent to instance 0x7939c910'
Эта ошибка вызвана распознавателем жестов? Он работал нормально до подкласса навигационного контроллера. Что еще более важно, что было бы лучшим способом определить, что тема была изменена, и изменить цвет панели навигации?
Заранее спасибо!
dusk()
не принимает параметров, измените селектор наdusk
, избавьтесь от:
. - person vacawama   schedule 06.06.2015func dusk(notification: NSNotification)
методом верхнего уровня внутриcustomNavigationController
(т.е. он не находится внутри другой функции, такой какviewDidLoad
)? - person vacawama   schedule 06.06.2015customNavigationController
? В раскадровке? Вы изменили классNavigationController
, чтобы использовать свой собственный класс? - person vacawama   schedule 06.06.2015