Получение событий пользовательского интерфейса в классах C ++

StackOverflow https://stackoverflow.com/questions/6807699

Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top