Создание детализированного представления


Создание детализированного представления

Если пользователь стукнет на каком-нибудь названии фильма, приложение должно перевести его в представление более глубокого уровня, сообщающее, какая строка была выбрана. Поэтому нам также нужно создать детализированное представление, в которое будет "углубляться" пользователь. Повторите описанные выше действия по созданию еще одного файла для шаблона Objective-C class, назовите его DisclosureDetailController.m и позаботьтесь о том, чтобы среда Xcode создала связанный с ним файл заголовка.

Детализированное представление должно содержать только одну метку, которую мы сможем установить. Она не должна быть редактируемой — мы просто будем использовать ее, чтобы показать, как можно передавать значения в дочерний контроллер. Поскольку этот контроллер не будет нести ответственность за табличное представление, нам также понадобится mb-файл для "совместных действий классом контроллера. Прежде чем мы создадим nib-файл, быстренько добавим выход для упомянутой выше метки. Для этого внесите в файл следующие изменения:

Во-первых, мы заменяем каркас Foundation каркасом UIKit. Данный класс изначально был подклассом класса NSObject, который теоретически можно было бы использовать в программах всех типов, требующих связывания только с каркасом Foundation, а не с UIKit (хотя, по правде говоря, трудно представить себе какое-нибудь iOS-приложение, которому не требуется каркас UIKit). Поэтому нам нужно изменить директиву импорта.

Почему, скажите на милость, мы добавляем как метку, так и строку? Помните принцип "ленивой загрузки"? Так вот, контроллеры представления тоже используют эту самую "ленивую загружу", причем скрытно. При создании нашего контроллера мы позаботимся о том, чтобы он не загружал свой nib-файл до тех пор, пока реально не обеспечит отображение своего содержимого. Когда контроллер помещается в стек контроллера навигации, мы не можем рассчитывать на установку метки. Если mb-файл не будет загружен, указатель label содержит всего лишь значение nil. Однако это не страшно. Сначала установим строку message равной нужному нам значению, а уже потом в методе viewWillAppear: установим указатель label на основе значения, содержащегося в строке message.

Почему для обновления изображения мы используем здесь метод viewWillAppear:, а не метод viewDidLoad, как раньше? Дело в том, что метод viewDidLoad вызывается при первой загрузке представления контроллера. Однако в нашем случае мы повторно используем представление контроллера DisclosureDetailController.
  • Дата: 9-12-2014, 17:02

Предыдущие статьи сайта:

Понравилась статья? Ставь лайки, рассказывай друзьям!



Отзывы о статье: Создание детализированного представления

Технологии, секреты и фишки Apple: Iphone, iPad, iPod