Каков наилучший способ организовать несколько подпредставлений? - PullRequest
5 голосов
/ 03 апреля 2009

Как человек, который является новичком в разработке для iPhone, я пытался найти хорошие шаблоны проектирования для управления несколькими подпредставлениями, особенно там, где для подпредставлений требуется один и тот же тип методов делегата, которые будут определены.

Например, у меня есть представление, где мне нужно переключаться между 2 UITableViews на основе действий пользователя. Для обоих UITableView необходим объект UITableViewControllerDelegate, определенный для заполнения строк и т. Д.

Считаете ли вы, более опытные разработчики iPhone, что перегрузка контроллера основного вида в качестве делегата для обоих подпредставлений является правильным способом сделать что-то? В настоящее время я определила 2 объекта, каждый из которых выступает в качестве делегата для каждого UITableView, чтобы попытаться сделать вещи более организованными. Он выполняет то, что мне нужно, но это хороший шаблон для подражания?

Я бы предположил, что есть несколько лучших практик, позволяющих избежать различных ловушек с управлением памятью и подобных забавных вещей. Заранее спасибо!

Ответы [ 3 ]

5 голосов
/ 03 апреля 2009

Вы можете использовать представления в качестве контейнеров для хранения таких элементов, как таблицы. Таким образом, в случае, если вы набросаете, у вас будет один контейнерный вид и поменяйте местами UITableViews из него ...

Хорошим подходом было бы иметь отдельные контроллеры представления для каждой таблицы. В противном случае он просто становится слишком беспорядочным, пытаясь отследить, какой набор данных вы поддерживаете в различных методах делегатов табличного представления, и усложняет настройку одной таблицы, которая может не применяться к другой.

Главное, что нужно знать при использовании контроллеров составного представления, это «self.navigationController», и связанные вызовы ничего не возвращают (так как они не являются на самом деле дочерними элементами вашего контроллера навигации), поэтому вам нужно будет передать ссылаться или иным образом обрабатывать это несколько иначе в контроллерах табличного представления.

2 голосов
/ 03 апреля 2009

Если бы между ними была небольшая разница, например, если ячейки таблицы расположены одинаково, но используют немного разные данные, я мог бы использовать операторы if, но в противном случае я бы использовал отдельные объекты делегатов некоторых Сортировать. Ключевым моментом здесь является разделение интересов: если вы пишете один метод, который выполняет две совершенно разные вещи, это признак того, что ваш код недостаточно хорошо организован, чтобы его можно было читать, поддерживать или гибко.

Кроме того, не забывайте, что контроллеры представления не имеют магических объектов, которые вы можете использовать только с одобренной Apple панелью вкладок и контроллерами навигации. Совершенно законно написать свой собственный «контроллер представления представления», который принимает два контроллера представления и переключается между ними. Тем не менее, вам нужно будет провести некоторое тестирование, чтобы определить, нужно ли вам вызывать -viewWillAppear: и тому подобное вручную или нет - есть какой-то магический механизм, который может или не может сделать это для вас, в зависимости от того, где вы добавили контроллер представления в иерархии.

1 голос
/ 03 апреля 2009

Вот так я бы сам справился с ситуацией. Один контроллер и делегат на UITableView. Источник данных можно использовать повторно, если это имеет смысл (то есть одни и те же данные отображаются в обоих UITableView). В противном случае в методах делегатов у вас будет много if, проверяющих, из какой таблицы отправлено сообщение.

Переключение UITableViews звучит как работа для UINavigationController для меня. Обычно на iphone вы не просто переставляете свои элементы управления. Вы создаете полные экраны (в коде или как .nib через InterfaceBuilder), переключаясь между ними, используя UINavigationController или UITabBar.

...