2012-02-15 4 views
0

Я хотел бы знать, какой лучший подход был бы для создания и добавления строк в uitableview на основе данных из API. Данные, возвращенные из API, будут выглядеть следующим образом. Некоторые поля должны быть стандартным текстом, некоторые - текстовыми полями пароля, некоторыми полями чисел, а некоторые - переключателями и полями выбора даты.iOS: Программно добавить разные таблицы tableviewcell

Я предполагаю, что мне нужно добавить поле для каждой ячейки в UITableView, чтобы иметь базовую базу. Затем, в зависимости от ячейки, которую я добавляю в то время, я заберу эту ячейку и добавлю ее в таблицу.

Как я буду отслеживать данные? Когда пользователь отправляет информацию, как я узнаю, какое поле является?

Поля, возвращаемые API, будут зависеть от того, какие настройки они разрешили на нашем сайте. И порядок будет зависеть от того, какой тип sort_order они установили.

"data": [ 
{ 
"field_name": "location_id", 
"display_name": "Home Location", 
"page_cust": "O", 
"sort_order": "10" 
}, 
{ 
"field_name": "first_name", 
"display_name": "First Name1", 
"page_cust": "R", 
"sort_order": "20" 
}, 
{ 
"field_name": "middle_name", 
"display_name": "Middle Name", 
"page_cust": "O", 
"sort_order": "25" 
}, 
{ 
"field_name": "last_name", 
"display_name": "Last Name1", 
"page_cust": "R", 
"sort_order": "30" 
}, 
{ 
"field_name": "address1", 
"display_name": "Address", 
"page_cust": "O", 
"sort_order": "40" 
}, 
{ 
"field_name": "address2", 
"display_name": "Address 2", 
"page_cust": "O", 
"sort_order": "45" 
}, 
{ 
"field_name": "city", 
"display_name": "City", 
"page_cust": "O", 
"sort_order": "50" 
}, 
{ 
"field_name": "state", 
"display_name": "State", 
"page_cust": "O", 
"sort_order": "60" 
}, 
{ 
"field_name": "zip", 
"display_name": "Zip Code", 
"page_cust": "O", 
"sort_order": "70" 
}, 
{ 
"field_name": "day_phone", 
"display_name": "Daytime Phone", 
"page_cust": "O", 
"sort_order": "80" 
}, 
{ 
"field_name": "night_phone", 
"display_name": "Evening Phone", 
"page_cust": "O", 
"sort_order": "90" 
}, 
{ 
"field_name": "cell_phone", 
"display_name": "Cell Phone", 
"page_cust": "O", 
"sort_order": "100" 
}, 
{ 
"field_name": "email", 
"display_name": "eMail", 
"page_cust": "O", 
"sort_order": "110" 
}, 
{ 
"field_name": "login", 
"display_name": "Login", 
"page_cust": "O", 
"sort_order": "120" 
}, 
{ 
"field_name": "password", 
"display_name": "Password", 
"page_cust": "O", 
"sort_order": "130" 
}, 
{ 
"field_name": "lead_id", 
"display_name": "Heard Via?", 
"page_cust": "O", 
"sort_order": "140" 
}, 
{ 
"field_name": "contact_okay", 
"display_name": "Contact Okay", 
"page_cust": "O", 
"sort_order": "170" 
}, 
{ 
"field_name": "call_okay", 
"display_name": "Call Okay", 
"page_cust": "O", 
"sort_order": "180" 
}, 
{ 
"field_name": "email_okay", 
"display_name": "E-mail Okay", 
"page_cust": "O", 
"sort_order": "190" 
}, 
{ 
"field_name": "mail_okay", 
"display_name": "Mail Okay", 
"page_cust": "O", 
"sort_order": "200" 
}, 
{ 
"field_name": "payment_type_id", 
"display_name": "Payment Method", 
"page_cust": "O", 
"sort_order": "210" 
}, 
{ 
"field_name": "employer", 
"display_name": "Company", 
"page_cust": "O", 
"sort_order": "260" 
}, 
{ 
"field_name": "occupation", 
"display_name": "Occupation", 
"page_cust": "O", 
"sort_order": "270" 
}, 
{ 
"field_name": "birth_date", 
"display_name": "Birth Date", 
"page_cust": "O", 
"sort_order": "280" 
}, 
{ 
"field_name": "gender", 
"display_name": "Gender", 
"page_cust": "O", 
"sort_order": "290" 
}, 
{ 
"field_name": "status_id", 
"display_name": "Status", 
"page_cust": "O", 
"sort_order": "340" 
}, 
{ 
"field_name": "allow_login", 
"display_name": "Allow to Log In", 
"page_cust": "O", 
"sort_order": "350" 
}, 
{ 
"field_name": "customer_type_id", 
"display_name": "Customer Type", 
"page_cust": "O", 
"sort_order": "360" 
}, 
{ 
"field_name": "rep_id", 
"display_name": "Assigned To", 
"page_cust": "O", 
"sort_order": "370" 
}, 
{ 
"field_name": "account", 
"display_name": "Account Number", 
"page_cust": "O", 
"sort_order": "380" 
}, 
{ 
"field_name": "needs", 
"display_name": "Special Needs", 
"page_cust": "O", 
"sort_order": "390" 
} 
] 
+0

Не уверен, что кто-то может ответить на этот вопрос, похоже, вам нужны основы о потреблении веб-сервиса, разбор json-ответа, управление массивами, заполнение табличного представления. –

+0

@Vince У меня уже есть json-синтаксический анализ. Мне нужно знать лучший подход к заполнению таблицы необходимыми ячейками и знать, какие ячейки есть, поскольку они могут быть в разных порядках. – Bot

+0

Поскольку ваше приложение запрашивает данные * в этом конкретном порядке *, используйте массив для хранения ваших объектов (которые будут хранить этот порядок). Думаю, что любое последующее переупорядочение должно обрабатываться вашим приложением. –

ответ

1

Вы используете веб-сервис. Основываясь на настройках пользователя, вы возвращаете ответ JSON в определенном порядке и составляете определенные поля.

Вы уже разобрали JSON, и вы получите словарь с одним ключом ("data") для массива словарей, не так ли?

Самый простой способ состоит в том, чтобы хранить эти словари в изменяемом массиве, NSMutableArray.
Вы знаете, какая ячейка является объектом, потому что источник данных будет запрашиваться для ячейки в определенном номер строки. Ячейка для строки 0 отображает поля первого словаря в массиве и т. Д.

NSDictionary *dictAtRow0 = [mySourceArray objectAtIndex:0]; 

Если вам интересно, как знать, если определенное поле присутствует в словаре, проверить наличие соответствующего ключа в словаре, что-то вроде этого:

if([[dictAtRow0 allKeys] containsObject:@"field_name"]) { 
    // here you know the dictionary has an entry for the key "field_name" 
} 

Также можно переупорядочить содержимое массива на основе значения для ключа sort_order. Хотя веб-сервис, похоже, уважает этот порядок, вы можете сделать это программно. То, что я рекомендую сделать это до заполнения массива источника:

// you parsed JSON and get the dictionary 
NSArray *sortedArray = [[mainDict objectForKey:@"data"] sortedArrayUsingComparator: ^(id a, id b) { 
    NSNumber *first = [NSNumber numberWithInteger:[[a objectForKey:@"sort_order"] integerValue]]; 
    NSNumber *second = [NSNumber numberWithInteger:[[b objectForKey:@"sort_order"] integerValue]]; 
    return [first compare:second]; 
}]; 
mySourceArray = [[NSMutableArray alloc] initWithArray:sortedArray]; 

Я не проверял этот код, компаратор, может быть багги, но вы получили идею.

Смежные вопросы