Нативная разработка мобильных приложений



Download 3,69 Mb.
Pdf ko'rish
bet185/228
Sana21.07.2022
Hajmi3,69 Mb.
#834838
1   ...   181   182   183   184   185   186   187   188   ...   228
Bog'liq
Нативная разработка мобильных приложений

File 

 New 

 File
(Файл 

Создать 

Файл)), и добавьте его в проект. Оставьте 
пока этот файл как есть и выберите файл 
Main.storyboard
, чтобы открыть его 
в редакторе раскадровки.
В редакторе раскадровки выберите сцену каталога. В инспекторе идентич
-
ности введите в поле 
Class
имя только что созданного класса 
CatalogViewCon­
troller
.


286

Вывод списка с данными
Взглянув на табличное представление внутри сцены, можно заметить, что 
сейчас оно пустое. Если бы мы попытались использовать табличное представ
-
ление прямо сейчас, у нас ничего не получилось бы, потому что в настоящее 
время отсутствуют прототипы ячеек. Прототипы ячеек – это шаблоны, опреде
-
ляемые в раскадровке, экземпляры которых автоматически создаются таблич
-
ным представлением для отображения содержимого элемента списка. Каждый 
элемент может включать различные типы ячеек. Прототипы определяются 
и используются всеми ячейками.
Чтобы добавить прототип ячейки, выберите табличное представление в сце
-
не, откройте инспектор атрибутов и увеличьте значение в поле 
Prototype Cells

Эта операция добавит новый элемент в таблицу, отображаемую в редакторе 
раскадровки. Однако, чтобы использовать ячейки этого типа, нам нужна воз
-
можность ссылаться на этот тип в коде. Для этого выберите ячейку в таблич
-
ном представлении в редакторе и присвойте ей уникальный идентификатор 
в поле 
Identifier
. Пока присвоим идентификатор 
CatalogTableViewCell
.
Выше мы решили, что в этой главе будут использоваться статические дан
-
ные. Давайте используем те же книги, что были перечислены в разделе «An
-
droid». Дополнительно расширим структуру 
Book
и добавим расширение с удоб
-
ным вспомогательным методом:
struct Book {
let title: String
let authors: [String]
let isbn: String
let pageCount: Int
let fiction: Bool
}
extension Book {
static let sampleData: [Book] = [
Book(title: "Fight Club", authors: ["Chuck Palahniuk"], 
isbn: "978-0393039764", pageCount: 208, fiction: true),
Book(title: "2001: A Space Odyssey", authors: ["Arthur C. Clarke"],
isbn: "978-0451457998", pageCount: 296, fiction: true),
Book(title: "Ulysses", authors: ["James Joyce"], 
isbn: "978-1420953961", pageCount: 682, fiction: true),
Book(title: "Catch-22", authors: ["Joseph Heller"], 
isbn: "978-1451626650", pageCount: 544, fiction: true),
Book(title: "The Stand", authors: ["Stephen King"], 
isbn: "978-0307947307", pageCount: 1200, fiction: true),
Book(title: "On The Road", authors: ["Jack Kerouac"], 
isbn: "978-0143105466", pageCount: 416, fiction: true),
Book(title: "Heart of Darkness", authors: ["Joseph Conrad"], 
isbn: "978-1503275928", pageCount: 78, fiction: true),
Book(title: "A Brief History of Time", authors: ["Stephen Hawking"],
isbn: "978-0553380163", pageCount: 212, fiction: false),
Book(title: "Dispatches", authors: ["Michael Herr"], 
isbn: "978-0679735250", pageCount: 272, fiction: false),
Book(title: "Harry Potter and Prisoner of Azkaban", 
authors: ["J.K. Rowling"],
isbn: "978-0439136365", pageCount: 448, fiction: true),


Заполнение представления списка 

287
Book(title: "Dragons Love Tacos", 
authors: ["Adam Rubin", "Daniel Salmieri"],
isbn: "978-0803736801", pageCount: 40, fiction: true),
]
}
Хотя пока это не очевидно, но мы не будем передавать сразу все данные 
в табличное представление. Одной из удивительных особенностей 
UITableView
и 
UICollectionView
является их способность обслуживать огромные объемы дан
-
ных, потому что они используют только часть данных, почти так же, как 
Recy­
clerView
в Android.
Чтобы заполнить табличное представление, нам нужно создать источник 
данных. Обычно для этого создается объект, реализующий протокол 
UITab le­
ViewDataSource
, и связывается с объектом табличного представления. Однако 
в этом примере мы не будем усложнять и реализуем протокол непосредствен
-
но в 
CatalogViewController
.
Обычно контроллеры 
UIViewController
сами реализуют протоколы источников 
данных для табличных представлений. Это нормально для простых приложений, 
но такой подход нарушает принцип разделения ответственности, проповедуемый 
более строгой архитектурой MVC. Кроме того, это приводит к раздуванию кода 
контроллера, что является распространенной проблемой. Разработчик, будь осто
-
рожен!
Добавим расширение для 
CatalogViewController
, реализующее 
UITableViewDa­
taSource
:
class CatalogViewController: UIViewController {
...
}
extension CatalogViewController: UITableViewDataSource {
}
Протокол определяет ряд необязательных методов, но кроме них есть два 
обязательных метода, которые вы обязаны реализовать для заполнения таб-
личного представления: 
tableView(_:numberOfRowsInSection:)
и 
tableView
(_:cell­
ForRowAt:)
. Рассмотрим первый из них.
Табличное представление будет вызывать 
tableView(_:numberOfRowsInSection:)

чтобы определить количество элементов в каждом разделе данных. В нашем 
табличном представлении будет только один раздел, поэтому можно просто 
вернуть количество элементов в статических данных, которые мы определили 
ранее:
func tableView(_ tableView: UITableView,
numberOfRowsInSection section: Int) ­> Int {
return Book.sampleData.count
}
По умолчанию табличное представление содержит только один раздел. Чтобы 
определить несколько разделов (с их заголовками), нужно реализовать метод 
numberOfSections(in:)
.


288

Вывод списка с данными
В этом методе мы сообщаем табличному представлению количество эле
-
ментов. Теперь реализуем следующий метод, 
tableView(_:cellForRowAt:)
, опре
-
деляющий логику заполнения ячеек.
Этот метод должен: создать экземпляр ячейки табличного представления 
и заполнить эту ячейку соответствующими данными. Вот, собственно, сам ме
-
тод:
func tableView(_ tableView: UITableView,
cellForRowAt indexPath: IndexPath) ­> UITableViewCell {
// Получить ячейку из пула свободных ячеек
let cell =
tableView.dequeueReusableCell(withIdentifier: "CatalogTableViewCell", 
for: indexPath)
// Найти книгу, соответствующую заполняемой ячейке
let book = Book.sampleData[indexPath.row]
// Заполнить метку с заголовком ячейки названием книги
cell.textLabel?.text = book.title
return cell
}
Первым делом мы получаем экземпляр ячейки для табличного представ
-
ления из пула незанятых ячеек, используя при этом идентификатор (
Catalog­
TableViewCell
), присвоенный при создании прототипа ячейки. Затем получаем 
книгу из источника данных, используя свойство 
indexPath.row
. Этот метод вы
-
зывается для каждой отображаемой ячейки, поэтому при извлечении третьего 
элемента это свойство будет иметь значение 
2
и мы сможем извлечь третий 
элемент из массива (т. е. это порядковый номер элемента, если считать с нуля). 
Затем мы заполняем текстовую метку в ячейке, записывая в нее название кни
-
ги, и возвращаем ячейку, чтобы табличное представление могло отобразить ее.
Наконец, нам осталось сделать еще один шаг: сообщить табличному пред
-
ставлению, что оно может использовать этот контроллер представления в роли 
источника данных.
Вернитесь к файлу 
Main.storyboard
в редакторе раскадровки. Нажмите 
и удерживайте клавишу 
Control
, наведите указатель мыши на таблицу в сцене 
каталога, нажмите левую кнопку мыши и перетащите объект 
Catalog
в струк
-
туру документа слева от холста. В появившемся диалоге выберите 
dataSource
в разделе 

Download 3,69 Mb.

Do'stlaringiz bilan baham:
1   ...   181   182   183   184   185   186   187   188   ...   228




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish