У меня есть NSPopUpButton
, что я получил подклассы, которые планирую использовать в нескольких местах в моей программе. Это подклассы, потому что у него есть специальные функции.Выполнение моих сообщений перехвата подкласса
Обычно для получения событий событий вы создаете метод в классе контроллера и затем соединяете его с конструктором интерфейса для обработки действия. Например, если пользователь изменил одну из опций в NSPopUpButton
, он отправил сообщение методу действия конструктора интерфейса, например, ниже.
- (IBAction)sourcePopUpMenuChanged:(id)sender {
NSLog(@"sourcePopUpMenuChanged");
}
Это хорошо в большинстве случаев, но в моем случае я хочу, чтобы он отправить сообщение подклассу это сам, а не класс контроллера. Я хочу сделать это, потому что я устанавливаю глобальную переменную за кулисами, чтобы отслеживать индекс для popUpMenu
, так как popupmenu появляется во многих разных окнах моего приложения.
Я знаю, что могу просто создать IBAction
событий для каждого окна для этого элемента управления и вручную устанавливать глобальную переменную каждый раз, но это кажется неэффективным.
Есть ли способ, чтобы, если ЛЮБЫЕ УСТАНОВКИ моего контроля получают сообщение «Действие», я могу запустить какой-то код, например, как установить глобальную переменную для gIndex = PopUpMenu Index Selected
.
Помощь очень ценится!
В вашем проекте не должно быть глобальных переменных. – Sven
Если глобальных переменных не должно быть, то что должно быть? Кроме того, я работаю с базой кода, на которой у меня нет большого контроля, все в программе основано на старой программе на C, которую я переношу на Cocoa. Он сильно полагался на логику глобальных переменных, поэтому я как бы застрял в этом. Я открыт для других предложений. Я скопировал глобальные переменные в файл заголовка и дал команду extern каждому, чтобы я мог их использовать. –
Я вижу. Таким образом, вы не можете легко избавиться от всех глобалов сразу. Моя рекомендация заключалась бы в том, чтобы инкапсулировать глобалы в класс и получить к ним доступ из нового кода только через экземпляр этого класса. Затем вы можете постепенно адаптировать свой существующий код для использования этого класса, пока вы не сможете удалить глобальную переменную и вместо этого использовать свойство своего объекта. (Разумеется, вы должны поместить все глобалы в один класс) – Sven