универсальный класс для форм quickDialog

Позвольте мне начать с объяснения ситуации. Я делаю приложение IOS, которое работает с веб-службой и веб-приложением. Возьмем следующий пример.

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

Сложность здесь в том, что каждая компания может создавать свои формы. Так что у компании X могут быть другие виды форм, чем у компании Y. После долгих исследований я нашел замечательную библиотеку QuickDialog. Вы можете найти его здесь. Определенно стоит того, чтобы проверить это!

ПРОБЛЕМА Хорошо, теперь проблема. Разумеется, данные должны быть отправлены обратно на сервер после того, как пользователь заполнит форму. Для этого я работаю с классом контроллера и классом NSObject. Лучший способ понять это — посмотреть пример входа в систему. Во-первых, это json логина.

{
    "grouped": true,
    "title": "Login Form",
    "controllerName": "LoginController",
    "sections": [
        { "title":"login", "elements": [
                { "type":"QEntryElement", "title":"Login","placeholder":"Login or email", "bind":"textValue:login", "key":"login"},
                {  "type":"QEntryElement", "title":"Password", "placeholder":"Password",  "secureTextEntry":true, "bind":"textValue:password" }
            ]
        },
        { "elements":[
                { "type":"QButtonElement", "key":"button", "title":"Login", "controllerAction":"onLogin:"}
            ]
        }
    ]
}

Вы можете видеть, что два поля имеют опцию привязки. Проект содержит класс NSObject (loginInfo). В этом классе эти поля добавляются как NSStrings.

@interface LoginInfo : NSObject {
@private
    NSString *_password;
    NSString *_login;
} 
@property(strong) NSString *login;
@property(strong) NSString *password;
@end

Далее идет класс контроллера. В этом классе контроллера вы говорите, что при нажатии кнопки вы извлекаете значения из текстовых полей в этот класс loginInfo. Делается это следующим образом.

- (void)onLogin:(QButtonElement *)buttonElement {

    [[[UIApplication sharedApplication] keyWindow] endEditing:YES];
    [self loading:YES];
    LoginInfo *info = [[LoginInfo alloc] init];
    [self.root fetchValueUsingBindingsIntoObject:info];
    [self performSelector:@selector(loginCompleted:) withObject:info afterDelay:2];
}
- (void)loginCompleted:(LoginInfo *)info {
    [self loading:NO];
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Welcome" message:[NSString stringWithFormat: @"Hi %@, I hope you're loving QuickDialog! Here's your pass: %@", info.login, info.password] delegate:self cancelButtonTitle:@"YES!" otherButtonTitles:nil];
    [alert show];
}

Хорошо, я знаю, что это много информации. Но мне нужно только хорошее объяснение моей проблемы. Я думаю, что класс контроллера - это не моя проблема, а класс NSObject. Я хочу, чтобы это было общим. Потому что это должно быть заполнено свойствами, которые он возвращает из json. Я не знаю, как я могу это сделать.

Я надеюсь, что кто-нибудь может мне помочь! Если вам нужно больше объяснений, не стесняйтесь спрашивать!

С уважением и заранее большое спасибо!


person Steaphann    schedule 14.11.2012    source источник


Ответы (1)


fetchValueUsingBindingIntoObjects: принимает "id", что означает, что почти любой объект, поддерживающий KVC, сделает это:

NSMutableDictionary *dict = [NSMutableDictionary new];
[self.root fetchValueUsingBindingsIntoObject:dict];

Таким образом, вы можете получить данные о любой форме и использовать их для отправки обратно в Интернет.

person Eduardo Scoz    schedule 14.11.2012
comment
Хорошо, это сработало! Но работает ли это также для ползунков и средств выбора? - person Steaphann; 14.11.2012
comment
да, все элементы, которые получают входные данные, наследуются от QEntryElement и предоставляют как минимум одно свойство для значения. Убедитесь, что вы установили ключевое свойство для каждого элемента. - person Eduardo Scoz; 14.11.2012
comment
Но мне нужно сделать эти элементы через json. Итак, для Picker должен быть json. type:QPickerElement, title:Picker1, items:[[Blue, Yellow, Green]] bind:textValue:keyker key:picker Верно? - person Steaphann; 14.11.2012