Получение событий пользовательского интерфейса в классах C ++
-
25-10-2019 - |
Вопрос
Я пишу 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 ++, но это кажется круговым способом достижения этого. Если то, что я описал, невозможно, есть ли лучший способ сделать то, что я пытаюсь сделать?
Решение
Я думаю, что вы уже обнаружили самое простое решение. Вы можете дополнительно инкапсулировать эту функциональность, внедрив мост OBJ-C/C ++ в базовом классе C ++ и вывести из этого любого из ваших бизнес-логических классов.
Там является Другой вариант, который должен сделать это на уровне выполнения Objective-C. Попросите ваш класс C ++ генерировать новый класс Objective-C с objc_allocateClassPair()
, добавить метод для обработки вашего действия с помощью class_addMethod()
, и т. д. (см. Ссылка на время выполнения Objective-C) Я не вижу никакой очевидной причины, по которой вы хотели бы пойти по этому пути, но хорошо знать об этом.