Источник данных
Источник данных связывает элемент с данными, которые в нем должны отображаться. Элемент обращается к источнику данных за информацией, а источник данных предоставляет ему информацию в нужном формате. В нашем примере источник данных должен сообщить количество компонентов (или столбцов) для прокручиваемого списка и общее количество строк в нем. Разные элементы используют разные виды источников данных.
Прокручиваемому списку необходим источник UIPickerViewDatasource, и сообщают сбоим делегатам, когда с ними что-то происходит.
Как упоминалось в главе 1, делегат отвечает за поведение элемента. Когда пользователь выполняет какую-либо операцию (в нашем примере — прокручивает список к некоторому значению), элемент сообщает делегату, что произошло, а делегат определяет, что нужно сделать в ответ. Как и в случае с источниками данных, разным элементам нужны разные делегаты. Для прокручиваемого списка используется делегат UIPickerViewDelegate.
Если не уверены — обращайтесь к документации Apple.
Не уверены в том, как правильно использовать прокручиваемый список? Просто обратитесь к документации API. Откройте в Xcode меню Help и выберите команду Xcode Help. Проведите поиск по строке «UlPickerView». В результатах поиска будет представлена полная информация о классе, необходимая для реализации прокручиваемого списка.
Почему содержимое списка предоставляется делегатом, а не источником данных?
У прокручиваемых списков есть одна особенность: их делегат может изменять способ отображения данных. В простейшем варианте он просто возвращает элементу строки. Если этого окажется недостаточно, он может вернуть целое представление (да, такое же, как построенное нами в Interface Builder, только меньше), например, для использования графики или специальных шрифтов.
Знакомый паттерн.
Мы уже встречались с паттерном «Элемент- Источник данных-Делегат» при обсуждении MVC в главе 1. Он используется почти всеми сложными элементами. Даже используемая нами модель «представление- контроллер» следует этому паттерну (за вычетом источника данных).
Разные элементы используют разные источники данных и делегатов.
Каждый элемент предъявляет свои специфические требования к источнику данных и делегату; вскоре мы поговорим о том, как это реализуется в Objective-C. Однако важно понимать, что хотя в паттерне обязанности разделяются между источником данных и делегатом, это не означает, что они должны быть реализованы в разных классах. Элементу необходим делегат и источник данных, его не интересует, предоставляются ли они одним объектом или разными. Он обращается к источнику данных за информацией, относящейся к данным, а к делегату — за тем, что относится к компетенции последнего.
Давайте посмотрим, как UlPicker использует свой источник данных и делегата. Это даст вам представление о том, как взаимодействуют разные компоненты этой схемы.
- Дата: 30-11-2014, 21:56