Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СЕССИЯ ОТВЕТЫ / iOS сессия ответы.docx
Скачиваний:
21
Добавлен:
25.12.2020
Размер:
14.45 Mб
Скачать

60 .Передачаданныхмеждуконтроллерами. (Passing Data Between Controllers)

Вы можете передавать данные между контроллерами представления в Swift 6 способами:

Используя свойство экземпляра (A → B)

Используя переходы (для раскадровки)

Используя свойства и функции экземпляра (A ← B)

Используя шаблон делегирования

С помощью обработчика закрытия или завершения

Используя NotificationCenter и шаблон наблюдателя(Observer)

Некоторые из этих подходов являются односторонними, поэтому вы можете отправлять некоторые данные в одну сторону, но не в другую.Так сказать, они не двусторонние.В большинстве случаев вам все равно нужно одностороннее общение! Самый простой способ получить данные от контроллера представления A для просмотра контроллера B (вперед) - использовать свойство. Свойство - это переменная, являющаяся частью класса.Каждый экземпляр этого класса будет иметь это свойство, и вы можете присвоить ему значение.Контроллеры представления типа UIViewController могут иметь свойства, как и любой другой класс.

Если у вас есть значение в одном контроллере представления и вы хотите передать его другому, есть два подхода: для передачи данных вперед вы должны общаться с помощью свойств, а для передачи данных назад вы можете использовать делегат или блок. Передача данных вперед используется, когда вы хотите показать некоторую информацию в контроллере подробного представления.Например, контроллер представления A может содержать список имен, которые может выбрать пользователь, а контроллер представления B может отображать некоторую подробную информацию об одном имени, выбранном пользователем.В этом случае вы должны создать свойство на B следующим образом:

То, как вы устанавливаете это свойство, зависит от того, как вы показываете контроллер детального представления.Например, если вы используете UINavigationController и хотите поместить новый контроллер представления в стек, вы должны написать это:

  1. Отображение данных в мобильном приложении ввиде списка. Работа с таблицами в iOs (Working With Tables)

(Курсера)

Следующее, что нам нужно сделать, - это создать табличное представление, так что давайте сделаем это. Введите слово таблица, и вы увидите здесь несколько вещей. Вы увидите контроллер табличного представления, табличное представление, табличное представление, так что же это все такое? Ну, контроллер табличного представления на самом деле является контроллером представления сам по себе, который имеет прототип ячейки и делает много управления для вас. И у вас может возникнуть искушение сделать это так: "почему бы мне просто не использовать это вместо того, чтобы перетаскивать табличное представление на экран? Что ж, позвольте мне сказать вам из профессионального опыта, что почти в каждом отдельном случае в любом приложении, которое я когда-либо создавал, никогда не стоит создавать контроллер табличного представления, чтобы использовать его реализацию Apple по умолчанию, потому что вам часто нужна настраиваемость. И поэтому я даже не собираюсь учить контроллеры табличных представлений, мы просто поговорим о создании пользовательских табличных представлений, которые вы все равно будете использовать в большинстве случаев. Таким образом, вы можете использовать это, если хотите, если вам нужна какая-то простая функциональность или вы хотите жить в рамках ограничений контроллера табличного представления, но мы не будем этого делать, потому что нам нужна настраиваемость. Поэтому я собираюсь удалить это, и вместо этого мы собираемся перетащить табличное представление на наш контроллер представления вот так, и я поставлю его прямо здесь. Теперь мы знаем из изображения, что вид таблицы на самом деле идет к краям экрана, так что это облегчает нашу жизнь. К краям и к низу, так от края к краю, а затем вниз к низу. Я собираюсь щелкнуть меню Pin-кода, и мы скажем 16 сверху, 0 слева,0 справа, а внизу мы также скажем 0, при 4 ограничениях, идеально. Замечательно, вот и наш вид на стол. И мне это нравится, выглядит хорошо. Следующее, что мы собираемся сделать,-это фактически построить ячейку, ячейку табличного представления прямо внутри нашего табличного представления. Теперь, если вы когда-либо работали с IOS раньше, вам нужно было создать zip-файл, внешний файл, в котором вы определяете свою ячейку табличного представления, а затем динамически загружать его во время выполнения, что вы все еще можете сделать. И на самом деле в приложении dev slips, которое у нас есть, у нас есть несколько мест, где мы фактически загружаем ячейку из ZIP-файла. И для этого есть особые причины. Нам нужна была предельная настраиваемость, и нам нужна была она динамически во время выполнения. И еще одно замечание: иногда, когда у вас очень большое приложение, ваши раскадровки могут стать очень большими, и они начинают работать очень медленно. Ладно, очень, очень медленно. Итак, предположим, что у вас было десять различных представлений здесь или контроллеров, которые все имели табличные представления, и вы вручную построили свои ячейки табличного представления здесь. Ваша раскадровка начнет работать очень медленно, в зависимости от того, какой у вас компьютер. Поэтому иногда приятно разбивать вещи на их собственные файлы, чтобы ваше приложение не было таким медленным, или у вас может быть несколько раскадровок. В нашем случае простая ячейка табличного представления, встроенная прямо здесь, будет просто великолепна. Итак, что я собираюсь сделать, так это взять эту ячейку табличного представления, и мы перетащим ее в табличное представление. Теперь вы не могли бы перетащить его туда, если бы сначала не было табличного вида. И поэтому я хочу отметить одну вещь-это слово prototype cells, которое не появится при запуске вашего приложения, так что не беспокойтесь об этом. И важно то, что находится внутри этого белого пространства прямо здесь. Итак, что мы собираемся сделать, так это сделать так, чтобы это выглядело как изображение на левой стороне. Поэтому я собираюсь перетащить его вниз, я просто смотрю на него здесь, примерно до того, что я думаю о размере изображения. Дизайнер не дал мне точных размеров пикселей здесь, и поэтому я не собираюсь беспокоиться об этом. Я просто собираюсь посмотреть на него здесь. Итак, у нас есть эта ячейка, и мы знаем, что нам понадобится какой-то тип изображения, поэтому я собираюсь спуститься в библиотеку объектов и ввести слово image, а теперь я собираюсь перетащить его сюда внутри ячейки. Это очень важно. Если вы заметили здесь слева, то теперь вы видите вложенную иерархию, табличное представление, ячейку табличного представления, представление содержимого изображения. Убедитесь, что вы находитесь в режиме просмотра изображения и все вещи внутри вашей ячейки находятся здесь, в этом режиме просмотра содержимого. Ячейка табличного представления имеет базовый вид, на который вы и будете класть свои вещи здесь. Итак, что мы собираемся сделать, так это перетащить это к краям камеры.

(Қосымша мәлімет)

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

Табличные представления реализованы в классе UITableView, каждая ячейка таблицы в классе UITableViewCell, нижний колонтитул и заголовок в классе UITableViewHeaderFooterView.

Настройка Table View

Настройка табличного представления производится в Interface Builder, в секции Table View инспектора атрибутов. Некоторые настройки недоступны в инспекторе атрибктов, и вы должны выполнить их программно.

Контент для Table View

Для того, чтобы отображать контент, табличное представление должно иметь источник данных. Источник данных является посредником между моделью данных приложения и таблицей. Источник данных Table View должен поддерживать UITableViewDataSource протокол.

Каждая отдельно взятая ячейка может отображать различные варианты контента. Ячейки могут использовать стиль по умолчанию, могут отображать изображения и текстовые метки. Вы можете установить изображение в ячейке программно, используя свойство image или в инспекторе атрибутов в поле Image, если ячейка используется в одном из стандартных стилей. Также вы можете установить программно свойства textLabel и detailTextLabel.

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

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

Заголовок и нижний колонтитул может отображать текстовую метку и опционально детализированный текст или пользовательский контент. Вы можете установить свойства textLabel и detailTextLabel программно. В качестве альтернативы вы можете разместить ваш пользовательский вид в заголовок или нижний колонтитул через свойство contentView программно. Если вы использовали пользовательский вид в заголовке или нижнем колонтитуле, не используйте стандартные textLabel и detailTextLabel, вместо этого добавьте необходимые вам текстовые метки в ваш пользовательский вид.

Поведение Table View

Табличные представления нуждаются в делегате (delegate) для управления внешним видом и поведением. Назначение контроллера вида в качестве делегата Table View требует реализации каких либо методов UITableViewDelegate протокола, через делегат вы также можете отслеживать выбор ячеек, настраивать заголовки и нижние колонтитулы, помогать удалять и реорганизовывать ячейки, а также осуществлять другие действия.

Стиль выбора (поле Selection) контролирует количество ячеек, которое пользователь может выбрать за раз. Существует три типа выбора для каждой ячейки в таблице: одиночный (single), множественный (multiple) и никакой (none). Таблица могут иметь различные типы выбора в нормальном режиме и режиме редактирования. Например вы можете позволить пользователю выбирать множество ячеек в нормальном режиме, но удалять только одну за один раз в режиме редактирования. В Interface Builder вы задаете стиль выбора для нормального режима, используя поле Selection, и для режима редактирования, используя поле Editing.

Нереиспользуемый идентификатор это строка для идентификации ячейки, которая будет использована для множества строк в табличном представлении (для повышения производительности). Вы можете задать это в свойстве reuseIdentifier программно или в поле Identifier инспектора атрибутов Interface Builder.

Вы можете установить значения отступа для контента ячейки через поля Level (свойство indentationLevel) и Width (свойство indentationWidth) секции Indentation. Значение Width применяется для каждого уровня отступа. Вы можете указать использовать отступ в режиме редактирования, выбрав опцию Indent While Editing (свойство shouldIndentWhileEditing).

Выбор опции Shows Re-order Controls (свойство showsReorderControl) приведет к тому, что ячейка выведет элемент управления, позволяющий изменить порядок ее в таблице, находящейся в режиме редактирования. Однако вы должны также реализовать метод tableView:moveRowAtIndexPath:toIndexPath:UITableViewDataSource протокола, и возвращать YES из метода tableView:canMoveRowAtIndexPath:. Эта часть должна быть выполнена программно.

Чтобы осведомить таблицу о заголовке и нижнем колонтитуле, вам нужно зарегистрировать их. Вы должны сделать это с помощью методов registerNib:forCellReuseIdentifier: или registerClass:forCellReuseIdentifier:. По подобию ячеек таблицы, заголовки и нижние колонтитулы переиспользуют идентификатор (Identifier) представляющий строку, для многократного создания их в таблице. Используйте метод initWithReuseIdentifier: при их инициализации.

Соседние файлы в папке СЕССИЯ ОТВЕТЫ