Позвольте мне начать с объяснения ситуации. Я делаю приложение 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. Я не знаю, как я могу это сделать.
Я надеюсь, что кто-нибудь может мне помочь! Если вам нужно больше объяснений, не стесняйтесь спрашивать!
С уважением и заранее большое спасибо!