Данные UITableView на основе предыдущего представления
В настоящее время я работаю над разделом настроек моего приложения для iPhone, и я только что понял, что если бы каждая страница в настройках имела свой собственный вид и.h +.m, это было бы МНОГО ненужного кода и представлений. Поэтому я пришел к выводу, что у меня будет только один тип подробного представления, который будет меняться в зависимости от строки в табличном представлении, которое выбрал пользователь. Однако... Я немного борюсь.
Настройка:
- Для основного вида настроек я хочу, чтобы это было сгруппированное табличное представление с несколькими группами и строками.
- Для подробного представления настроек я также хочу, чтобы оно было сгруппированным табличным представлением с несколькими группами и строками (вот где это сбивает с толку).
Я видел, что простые вещи, такие как изображения и метки, зависят от предыдущего представления, но не от сгруппированных структур табличного представления. Можно ли выполнить то, что я хочу, без тонны мнений или утверждений "если"? Любая помощь приветствуется.
2 ответа
Вам придется сделать две вещи (учитывая, что у вас есть контроллер вида настроек и контроллер вида деталей)...
Во-первых, когда пользователь выбирает строку в контроллере представления настроек, вы должны установить настройку, которую вы будете редактировать, в контроллере подробных представлений. То есть....
- (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath { [self.detailViewCtrl setSetting: [self.settings objectAtIndex: indexPath.row]]; [self.navigationController pushViewController: self.detailViewCtrl]; }
В подробном представлении вам придется изменить следующий метод для отображения вашей таблицы:
- (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath { //... сделать что-то с self.setting }
И вы не можете забыть перезагрузить таблицу:
- (void) setSetting: (id) newSetting { if (setting! = newSetting) { [настройка выпуска]; setting = [newSetting retain]; [self.tableView reloadData]; } }
Это предполагает следующее:
- Ваше первое представление имеет свойство detailViewCtrl
- Ваше первое представление имеет NSArray настроек свойства под названием "настройки"
- Ваш подробный вид имеет свойство 'setting'
- Ваш контроллер детального просмотра знает, что делать с его свойством 'setting'
Да, это возможно. Apple, по сути, делает это с помощью пакета настроек и его конфигурации через файл plist.
Вы хотите написать общий контроллер табличного представления, который загружает свою конфигурацию и содержимое из внешнего источника (один или несколько файлов plist являются очень хорошим выбором для этого). Это не очень сложно сделать, по крайней мере, до тех пор, пока действия, выполняемые вашим табличным представлением (например, когда пользователь касается ячейки), четко определены и легко кодируются в файле конфигурации. Например: такие действия, как "открыть новую страницу с этим конфигом" или "сохранить это значение под этим ключом в пользовательских значениях по умолчанию", можно легко настроить, а что-то вроде "попросить пользователя сделать снимок с камеры, а затем разрешить его обрезку". это по своему вкусу и загрузить его в Twitter "сложнее.