Сегментированный элемент управления внутри TableView
Я часами пытался найти решение, но я всегда ничего не получал.
Я пытаюсь создать сегмент управления внутри TableView
которые имеют CustomCell
для двух представлений для сегмента управления.
https://www.youtube.com/watch?v=dw7kytoA3KU&t=198s - прекрасный пример того, что я пытаюсь выполнить, но пользователь помещает вставки 1 CustomCell, и код немного сбивает с толку.
Моя первая CustomCell содержит изображения, имена и номера. Мой второй CustomCell содержит только изображение.
Так что мои вопросы...
Как мне создать два массива для двух CustomCell?
Пример того, что я пытаюсь достичь
Пользовательская ячейка 1:
let names = ["Pizza","Soup","Tacos","Chicken", "Beef"]
let image = [UIImage(named: "Pizza1"), UIImage(named: "Soup1"), UIImage(named: "Tacos1"), UIImage(named: "Chicken1"), UIImage(named: "Beef1")]
let numbers = ["1", "2", "3", "4", "5"]
Custom Cell 2:
let photo = [UIImage(named: "Pic1"), UIImage(named: "Pic2"), UIImage(named: "Pic3")]
Из того, что я исследовал, когда пришло время вызывать файл CustomCell и два CustomCell в мой код, это будет правильно?
let nib = UINib(nibName: "CustomCell", bundle: nil) tableView.register(nib, forCallReuseIdentifier: "CustomCell1") tableView.register(nib, forCallReuseIdentifier: "CustomCell2")
Что для этого нужно вернуть?
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
Эта часть, где я запутался в том, что вводить
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
Резюме: я пытаюсь создать сегментный элемент управления в tableView, который имеет 2 CustomCells. Я хочу, чтобы первое представление сегмента было CustomCell, которое имеет изображения, имя и номер. Второй вид сегмента, чтобы иметь только изображение.
Спасибо!
2 ответа
Как мне создать два массива для двух CustomCell?
let names = ["Pizza","Soup","Tacos","Chicken", "Beef"]
let image = [UIImage(named: "Pizza1"), UIImage(named: "Soup1"), UIImage(named: "Tacos1"), UIImage(named: "Chicken1"), UIImage(named: "Beef1")]
let numbers = ["1", "2", "3", "4", "5"]
Было бы неплохо иметь три массива, но это немного странно. С Swift структурой и одним массивом может быть проще работать:
struct Food {
var name: String
var image: UIImage
var number: Int
}
let foods = [
Food(name: "Pizza", image: UIImage(named: "Pizza1"), number: 1),
Food(name: "Soup", image: UIImage(named: "Soup1"), number: 2),
Food(name: "Tacos", image: UIImage(named: "Tacos1"), number: 3),
Food(name: "Chicken", image: UIImage(named: "Chicken1"), number: 4),
Food(name: "Beef", image: UIImage(named: "Beef1"), number: 5)
]
Из того, что я исследовал, когда пришло время вызывать файл CustomCell и два CustomCell в мой код, это будет правильно?
let nib = UINib(nibName: "CustomCell", bundle: nil)
tableView.register(nib, forCallReuseIdentifier: "CustomCell1")
tableView.register(nib, forCallReuseIdentifier: "CustomCell2")
Почти... если у вас есть две пользовательские ячейки, я бы ожидал увидеть два пера:
let nib1 = UINib(nibName: "CustomCell1", bundle: nil)
tableView.register(nib1, forCallReuseIdentifier: "CustomCell1")
let nib2 = UINib(nibName: "CustomCell2", bundle: nil)
tableView.register(nib2, forCallReuseIdentifier: "CustomCell2")
Что для этого нужно вернуть?
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
Это количество клеток в вашей таблице. Так что это может быть:
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return foods.count
}
Эта часть, где я запутался в том, что вводить
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
Вот где ваше приложение удаляет ячейку и настраивает ее содержимое до появления в таблице:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell1", for: indexPath)
cell.nameLabel.text = foods[indexPath.row].name
return cell
}
Я до сих пор не уверен, что вы собираетесь делать с SegmentedControls... вы хотите, чтобы каждая ячейка содержала сегментированный элемент управления? Это было бы довольно... необычно.
Сначала я предлагаю вам пройтись по некоторым учебным пособиям по использованию UITableViews и UISegmentedControl, поскольку, похоже, вы новичок в разработке под iOS. Теперь, чтобы ответить на ваши вопросы:
#1. How should I create two array for the two CustomCell?
Я предлагаю вам изучить создание NSObjects в Swift. Используя это, вы можете установить свойства, такие как имя, изображения, номера и т. Д. Для вашего объекта. Затем вы можете иметь коллекцию своих объектов и использовать их в своем источнике данных для своей таблицы.
#2. Regarding Custom UITableViewCells.
Да, вам нужно будет зарегистрировать свои пользовательские UITableViewCells для их использования. Или сделать раскадровку способом.
#3. func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
В этом методе делегата вы указываете количество строк, которые должны появиться в вашем UITableView. Например, если у вас есть массив объектов питания, вы должны вернуть foods.count.
#4. func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
Это та часть, где вы создаете и настраиваете ячейку, которая будет отображаться в строках вашего UITableView.
Если вы хотите, чтобы UITableView и UISegmentedControl были вместе, я предлагаю пойти проще всего, добавив UISegmentedControl и два UITableView в представление вашего UIViewController. Измените видимый UITableView в зависимости от того, какой сегмент выбран, вы можете поймать его в событии изменения значения UISegmentedControl.