Метод tableView
Здесь нет ничего странного, поскольку совершенно приемлемо присваивать подкласс такому свойству, как это. В данном случае мы используем изменяемый массив в методе viewDidLoad, чтобы было легче добавлять новые контроллеры итеративным способом, но мы оставляем это свойство (с объявлением "неизменного массива") как сообщение остальному коду о том, что он (код) не должен модифицировать этот массив.
В последней части метода viewDidLoad содержится вызов метода [super viewDidLoad]. Этот вызов объясняется тем, что мы работаем с подклассом, выведенным из класса UITabieViewController. Если вы переопределяете метод viewDidLoad, следует всегда вызывать метод [super viewDidLoad], поскольку иначе никак нельзя узнать, выполняет ли родительский класс какое-нибудь важное действие в собственном методе viewDidLoad.
Метод tableView:numberOfRowsInSection: здесь работает так же, как аналогичные методы, которые вы видели раньше. Он просто возвращает количество строк из нашего массива контроллеров. Метод tableView:cellForRowAtIndexPath: также не отличается ничем особенным от своих "сородичей" из предшествующих глав. Он получает ячейку из очереди или создает новую (если очереди не существует), а затем считывает из массива объект контроллера, соответствующий опрашиваемой строке. Затем устанавливает свойства textlabel и image ячейки, используя значения свойств , взятых из контроллера.
Обратите внимание на следующее: мы предполагаем, что объект, считанный из массива, является экземпляром класса SecondLevelViewController, и присваиваем значение свойства rowlmage контроллера свойству UI Image, Это действие приобретет больше смысла, когда (т.е. в следующем разделе) мы объявим и добавим в массив первый конкретный контроллер второго уровня.
Последний метод, который мы добавили, — здесь самый значительный (по крайней мере, новизной своих действий). Вы видели раньше метод tableView:didSelectRowAt Index Path:, который вызывается после того, как пользователь стукнет по строке. Если при выборе строки требуется реализовать переход на более глубокий уровень, то именно так мы здесь и поступим. Сначала получаем строку из переменной типа indexPath.
NSUInteger row (indexPath row);
Затем получаем доступ к тому контроллеру (из нашего массива), который соответствует этой строке.
SecondLevelViewController nextController pf[self .controllers objectAtIndex:row) ;
Потом используем наше свойство navigationController, которое указывает на контроллер навигации нашего приложения, чтобы поместить следующий контроллер — тот, который мы извлекли из нашего массива, — в стек контроллера навигации.
Вот практически и все. Каждый контроллер в иерархии должен знать только о своем дочернем объекте. При выборе строки активный контроллер отвечает за считывание подконтроллера (или создание нового), устанавливая по необходимости его свойства (здесь такой необходимости нет), а затем помещая этот новый подконтроллер в стек контроллера навигации. При выполнении описанных действий остальная обработка будет реализована автома- тически контроллером навигации.
На этом этапе формирование каркаса приложения можно считать завершенным. Сохраните все свои файлы, постройте и запустите приложение. Если все было сделано правильно, то после запуска приложение должно отобразить навигационную панель с заголовком First Level, скольку наш массив пока пуст, никакие строки отображены не будут.
Теперь мы готовы начать разработку представлений второго уровня, но сначала "до- lmHeM пиктогРаммы изображений из архивного каталога исходного кода 09 Nav. Папка ages должна содержать восемь .png-файлов изображений: шесть из них предназначенные для вставки в строки, а еще два мы будем использовать ниже в этой главе (они помогут учшить внешний вид кнопок). Добавьте папку Images в папку Resources своего Xcode- роекта, и двинемся дальше.
Первый подконтроллер: представление кнопки раскрытия
Итак, реализуем первый из наших контроллеров представления второго уровня. Для этого нужно создать подкласс контроллера SecondLevelViewController.
Выберите в среде Xcode папку Classes и нажмите комбинацию клавиш , чтобы снова активизировать менеджер новых файлов. Для строки Cocoa Touch Class (в левой панели) выберите вариант Objective-C class, а затем из всплывающего меню Subclass of — команду NSObject. Назовите файл DisclosureButtonController.m и не забудьте создать заголовочный файл. Этот класс будет управлять таблицей названий фильмов, которая будет отображаться, когда пользователь щелкнет на элементе Disclosure Buttons в представлении верхнего уровня.
- Дата: 9-12-2014, 13:43