Получение событий пользовательского интерфейса в классах 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) Я не вижу какой-либо очевидной причины, по которой вы хотели бы пойти по этому пути, но хорошо знать об этом.

Другие вопросы по тегам