Я хочу иметь возможность создать диалоговое окно с двумя текстовыми полями в нем.
Я могу создать диалог с 1 текстовым полем с кодом ниже,
const void* keys[] =
{
kCFUserNotificationAlertHeaderKey,
kCFUserNotificationAlertMessageKey,
kCFUserNotificationAlternateButtonTitleKey,
kCFUserNotificationTextFieldTitlesKey
};
const void* values[] =
{
titleStr,
messageStr,
CFSTR("Cancel"),
labelStr
};
CFDictionaryRef elements = CFDictionaryCreate(0, keys, values, sizeof(keys)/sizeof(*keys), &kCFTypeDictionaryKeyCallBacks,&kCFTypeDictionaryValueCallBacks);
CFShow(elements);
Когда я добавляю еще одну пару ключ-значение, например, kCFUserNotificationTextFieldTitlesKey с некоторым CFSTR («»), я не вижу ничего обновляющегося в диалоговом окне.
Итак, как мы можем иметь несколько текстовых полей, например Имя пользователя / пароль, в CFDitionaryCreate ().
Я прочитал в документации, что у нас может быть несколько titleKeys с массивом, но я не уверен, как это сделать.
Мне удалось добавить одно поле в диалоге kCFUserNotificationProgressIndicatorValueKey
но не в состоянии добавить тот же ключ снова.
Я относительно новый для OSX и углерода API (который я знаю, что устарела)
Я был бы признателен, если бы мне указали на правильный ресурс или пример, который может помочь мне достичь этого.
Кроме того, использование какао здесь не вариант. Мне нужно добиться этого с помощью углерода.
Значение, связанное с ключом kCFUserNotificationTextFieldTitlesKey
или же kCFUserNotificationTextFieldValuesKey
будет массив строк:
CFTypeRef values[2] = { CFSTR("one"), CFSTR("two") };
CFArrayRef valArray = CFArrayCreate( NULL, values, 2, &kCFTypeArrayCallBacks );
Кстати, вы используете Core Foundation, а не Carbon. Не каждый API на основе C является Carbon.
Других решений пока нет …