Получение событий пользовательского интерфейса в классах C++
Я пишу Objective-C++ в Xcode для iOS. Мой проект - это в основном классы C++ и несколько классов Objective-C на высшем уровне. Мои классы C++ содержат элементы пользовательского интерфейса Objective-C, и они нужны мне для получения событий пользовательского интерфейса. Возможно ли для элемента пользовательского интерфейса вызывать функцию-член C++ напрямую? Т.е. есть ли эквивалент этого вызова для функции C++:
[control addTarget:object action:@selector(action:) forControlEvents:event];
Из того, что я понимаю @selector
не поможет мне здесь. Мне нужен другой способ заставить элемент управления вызывать мою функцию-член - существует ли она?
Сейчас я использую класс-приемник Objective-C, член моих классов C++, который получает события пользовательского интерфейса и затем соответствующим образом вызывает мой класс C++, но это похоже на обходной путь достижения этой цели. Если то, что я описал, невозможно, есть ли лучший способ сделать то, что я пытаюсь сделать?
1 ответ
Я думаю, что вы уже нашли самое простое решение. Вы могли бы дополнительно инкапсулировать эту функциональность, внедрив мост Obj-C/C++ в базовый класс C++ и вывести из него любой из ваших классов бизнес-логики.
Есть еще один вариант, который заключается в том, чтобы сделать это на уровне среды выполнения Objective-C. Пусть ваш класс C++ сгенерирует новый класс Objective-C с objc_allocateClassPair()
, добавьте метод для обработки вашего действия с class_addMethod()
и т. д. (см. Objective-C Runtime Reference) Я не вижу какой-либо очевидной причины, по которой вы хотели бы пойти по этому пути, но хорошо знать об этом.