Хорошо. Здесь ситуация, я средний разработчик C ++. У меня нет опыта работы с Objective C или Cocoa.
Я работаю над проектом в настоящее время в OSX с Carbon [я тоже новичок в углероде], и уже 3 месяца кодирую на чистом C ++.
Теперь я сталкиваюсь с проблемой, когда мне нужно отобразить окно ввода для пользователя и получить от него некоторую информацию, скажем, USERNAME, практически не зная, как отображаются поля ввода в OSX, каковы мои варианты. Я занимался программированием на win32, поэтому пару часов чтения и 1 час программирования должны сделать эту работу за меня. Мне просто нужно немного помочь, чтобы направить меня в правильном направлении.
Вот что я получил от Googling немного …
Есть 3 способа, которые могут быть использованы для реализации поля ввода в OSX
1- Используйте углерод, Я был в состоянии отобразить простое диалоговое окно, используя его. Я не знаю, как я могу использовать поля ввода там ..
Вот код, который я пробовал для поля ввода.
DialogRef dialog = GetNewDialog (128, NULL, (WindowRef)-1);
WindowRef lay;
ControlRef outControl;
Rect boundsRect;
boundsRect.top = 0;
boundsRect.left = 0;
boundsRect.right = 200;
boundsRect.bottom = 99;lay = GetDialogWindow(dialog);
CreateEditTextControl (lay, &boundsRect, NULL, false, true, NULL, &outControl);
InstallStandardEventHandler(GetWindowEventTarget (lay));
ShowWindow (lay);
Я не смог ничего увидеть, когда запустил программу, и Xcode показывал предупреждение о
CreateEditTextControl
говоря, что это устарело.
Вариант 2 что я должен объединить Objective C и C ++, но я не знаю, как работает цель C, вот небольшое преимущество, которое я получил в выполнении этот. У меня есть только несколько часов, чтобы сделать это.
Вариант 3
я нашел это Вот.
//
// test1.cpp
// This program shows how to access Cocoa GUI from pure C/C++
// and build a truly functional GUI application (although very simple).
// Compile using:
// g++ -framework Cocoa -o test1 test1.cpp
//
// that will output 'test1' binary.
//#include <CoreFoundation/CoreFoundation.h>
#include <objc/objc.h>
#include <objc/objc-runtime.h>
#include <iostream>
extern "C" int NSRunAlertPanel(CFStringRef strTitle, CFStringRef strMsg,
CFStringRef strButton1, CFStringRef strButton2,
CFStringRef strButton3, ...);int main(int argc, char** argv)
{
id app = NULL;
id pool = objc_getClass("NSAutoreleasePool");
if (!pool)
{
std::cerr << "Unable to get NSAutoreleasePool!\nAborting\n";
return -1;
}
pool = objc_msgSend(pool, sel_registerName("alloc"));
if (!pool)
{
std::cerr << "Unable to create NSAutoreleasePool...\nAborting...\n";
return -1;
}
pool = objc_msgSend(pool, sel_registerName("init"));
app = objc_msgSend(objc_getClass("NSApplication"),
sel_registerName("sharedApplication"));
NSRunAlertPanel(CFSTR("Testing"),
CFSTR("This is a simple test to display NSAlertPanel."),
CFSTR("OK"), NULL, NULL);
objc_msgSend(pool, sel_registerName("release"));
return 0;
}
Весь пользовательский интерфейс Carbon устарел и не может использоваться для 64-битной разработки.
Третья альтернатива будет CFUserNotification.
Использование option2 : Какао фреймворк предоставляет вам все наборы простых элементов управления, Messagbox и другие. Но там нет inputBox. 🙁
Однако вы можете создать свой собственный inputBox или изменить панель оповещений, как я сделал здесь:
- (NSString *)inputBox: (NSString *)prompt{
NSAlert *alert = [NSAlert alertWithMessageText: prompt
defaultButton:@"OK"alternateButton:@"Cancel"otherButton:nil
informativeTextWithFormat:@""];
NSTextField *input = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 200, 24)];
[alert setAccessoryView:input];
NSInteger button = [alert runModal];
if (button == NSAlertDefaultReturn) {
[input validateEditing];
return [input stringValue];
}
else if (button == NSAlertAlternateReturn) {
return nil;
}
else {
return nil;
}
}