Простое модальное диалоговое окно Cocoa в Mac OS X - PullRequest
0 голосов
/ 17 июля 2010

Я портирую плагин с 32-битного на 64-битный, который на самом деле на C ++.Поскольку Carbon больше не поддерживается на 64-разрядных системах, мне нужно перенести некоторый код на Cocoa .Единственная помощь Какао, в которой я нуждаюсь, состоит в том, как создать простое модальное окно (не лист), которое имеет две кнопки, OK и Отмена, и дает мне строку ввода от пользователя.Я создал какао-боб, но понятия не имею с Objective-C.Я мог бы начать изучать Objective-C прямо сейчас, но это занимает некоторое время, и это единственный фрагмент кода, который мне нужен прямо сейчас.

Как будет выглядеть фрагмент кода?

Ответы [ 2 ]

2 голосов
/ 17 июля 2010

Вам нужно будет изучить Objective-C и Какао независимо от того, что еще вы хотите сделать, потому что не существует «одного вызова на системном уровне» для представления модальной панели.

Как минимум, выдля вашей панели потребуется создать подкласс NSWindowController, который будет действовать как владелец файла для своего nib-файла и управлять взаимодействием между его элементами управления и любыми данными, которыми он манипулирует.Затем вам нужно будет передать это -[NSApplication runModalForWindow:] и обработать результат, или -[NSApplication beginModalSessionForWindow:] и обработать запуск и / или остановку модального сеанса самостоятельно.

Это означает написание кода для каркасов Cocoa в Objective-C.

К счастью, поскольку вы только начинаете с сообщения, текстового поля и пары кнопок, это будет довольно просто.Но дело не только в гипотетической NSGetTextInput() функции - какао отказывается от таких вещей в пользу абстракций, которые можно соединить между собой простым и расширяемым способом.

Например, если вы решили, что не простонужен ввод текста, но также и флажок, вам придется заменить гипотетический NSGetTextInput() на что-то вроде выше.Но, прежде всего, делая вышеописанное, добавление этого флажка становится дополнительной работой за несколько секунд.Или добавив интересную проверку в ваш текстовый ввод.Или предварительно заполняя ввод текста данными из объекта.Или реализация тайм-аута (включая представление таймера обратного отсчета) в вашем модальном диалоге.(Модальность в настоящее время сильно не одобряется ...) Или любые другие изменения.

2 голосов
/ 17 июля 2010

Если это все, что вам нужно, вы можете избежать какао, используя вместо этого API-интерфейсы CFUserNotification.

...