Я хочу использовать UITableview с разными настраиваемыми tableViewCells. Мои 3 клетки таковы:
- Ячейка1: должна иметь изображение и метку.
- Ячейка2: должна иметь две метки.
- Cell3: должен иметь dayPicker.
Я не хочу кодировать теги для ячеек. Как мне это сделать в Swift. Должен ли я кодировать свой собственный класс для каждой ячейки? Могу ли я использовать один tableviewController? Как я могу заполнить данные в разных ячейках?
Я хотел бы создать tableView, например контактное приложение устройства iOS.
swift
uitableview
Easyglider
источник
источник
Ответы:
Позвольте мне сначала ответить на ваши вопросы.
Должен ли я кодировать собственный класс для каждой ячейки? => Да, я так считаю. По крайней мере, я бы так поступил.
Могу ли я использовать один tableviewController? => Да, можно. Однако вы также можете иметь табличное представление внутри вашего View Controller.
Как я могу заполнить данные в разных ячейках? => В зависимости от условий вы можете заполнять данные в разных ячейках. Например, предположим, что вы хотите, чтобы первые две строки были похожи на ячейки первого типа. Итак, вы просто создаете / повторно используете первый тип ячеек и устанавливаете его данные. Думаю, будет более понятно, когда я покажу вам скриншоты.
Позвольте мне привести пример с TableView внутри ViewController. Как только вы поймете основную концепцию, вы можете попробовать изменить ее как хотите.
Шаг 1. Создайте 3 пользовательских ячейки TableViewCell. Я назвал его FirstCustomTableViewCell, SecondCustomTableViewCell, ThirdCustomTableViewCell. Вам следует использовать более значимые имена.
Шаг 2: перейдите на Main.storyboard и перетащите TableView внутри вашего View Controller. Теперь выберите представление таблицы и перейдите к инспектору удостоверений. Установите «Ячейки прототипа» на 3. Здесь вы только что сказали своему TableView, что у вас может быть 3 разных типа ячеек.
Шаг 3. Теперь выберите 1-ю ячейку в TableView и в инспекторе удостоверений, поместите «FirstCustomTableViewCell» в поле «Пользовательский класс», а затем установите идентификатор как «firstCustomCell» в инспекторе атрибутов.
Сделайте то же самое для всех остальных - установите их настраиваемые классы как «SecondCustomTableViewCell» и «ThirdCustomTableViewCell» соответственно. Также последовательно установите идентификаторы secondCustomCell и thirdCustomCell.
Шаг 4: Отредактируйте пользовательские классы ячеек и добавьте розетки в соответствии с вашими потребностями. Я отредактировал его на основании вашего вопроса.
PS: Нужно поставить розетки под определение класса.
Итак, в FirstCustomTableViewCell.swift под
вы бы поставили ярлык и выходы для просмотра изображений.
и в SecondCustomTableViewCell.swift добавьте две метки, например:
и ThirdCustomTableViewCell.swift должен выглядеть так:
Шаг 5: В ViewController создайте Outlet для TableView и установите соединение из раскадровки. Кроме того, вам необходимо добавить UITableViewDelegate и UITableViewDataSource в определение класса в качестве списка протоколов. Итак, определение вашего класса должно выглядеть так:
После этого прикрепите UITableViewDelegate и UITableViewDatasource вашего табличного представления к вашему контроллеру. На этом этапе ваш viewController.swift должен выглядеть так:
PS: Если бы вы использовали TableViewController, а не TableView внутри ViewController, вы могли бы пропустить этот шаг.
Шаг 6: Перетащите изображения и метки в ячейку в соответствии с классом Cell. а затем обеспечить подключение к их розеткам из раскадровки.
Шаг 7. Теперь напишите необходимые методы UITableViewDatasource в контроллере представления.
источник
Swift 3.0 + обновление с минимальным кодом
Базовая концепция: создание табличного представления с динамическими прототипами ячеек. Назначьте идентификатор и создайте собственный класс ячейки представления таблицы для каждого прототипа ячейки. Инициировать и отображать настраиваемые ячейки в методе делегата табличного представления.
1. Создайте ячейки в раскадровке.
Перетащите tableView на свой контроллер представления, добавьте к нему ячейки прототипа, а затем перетащите элемент пользовательского интерфейса в ячейки представления таблицы, при необходимости добавьте ограничение.
2. Создавайте собственные
UITableViewCell
классы.Добавьте в свой проект следующий код. Я помещаю его прямо над классом контроллера представления.
3. Назначьте пользовательский класс и идентификатор прототипам ячеек.
Для каждого прототипа ячейки в раскадровке назначьте настраиваемый класс, созданный на шаге 2, а затем введите уникальный идентификатор.
4. Подключите элементы пользовательского интерфейса к быстрому коду.
Control перетащите представление таблицы и подключитесь к классу контроллера представления. Control перетащите элементы пользовательского интерфейса, которые будут добавлены к прототипам ячеек на шаге 1, и подключитесь к соответствующему классу ячейки представления таблицы.
5. Добавьте код для просмотра контроллера и управления табличным представлением.
Сделайте свой контроллер представления совместимым с делегатом табличного представления
В
viewDidLoad
настройте делегата табличного представления и источника данных.Наконец, добавьте два метода делегата для управления представлением таблицы в соответствии с минимальными требованиями.
6. Попробуйте :)
источник
Приведенные выше ответы - лучшие ответы, но есть ТОННА причин для возникновения этой проблемы. Вот еще одно возможное решение для тех, у кого есть эта проблема:
Моя проблема заключалась в том, что я переходил к классу ViewController, а не к раскадровке. Так что моя ссылка на ячейку раскадровки была бессмысленной, поскольку раскадровка не использовалась.
Я делал это:
И мне нужно было сделать что-то вроде этого:
Надеюсь, это кому-то поможет.
источник
UITableViewController
наследуется ,UIViewController
что ужеUITableviewDataSource
иUITableviewDelegate
отображается на себя.Вы можете
UITableViewController
создать подкласс или использоватьTableView
внутри вашегоViewController
. После этого вы должны реализовать необходимые методы (cellForRowAtIndexPath
and numberOfRowsInSection
), которые объявлены вUITableviewDataSource
.Также в раскадровке вам нужно создать прототипы ячеек с уникальным идентификатором.
Существуют базовые типы ячеек с (например, заголовком, подзаголовком) - вы также можете использовать их, если вам не нужна специальная конфигурация.
Итак, для средства выбора, да, вам нужно создать свою собственную ячейку. Создайте необходимое средство
UITableViewCell
выбора даты удержания класса и убедитесь, что вы используете делегат для отправки желаемого результата обратно в вашViewController
.источник