Сегментированный элемент управления внутри TableView

Я часами пытался найти решение, но я всегда ничего не получал.

Я пытаюсь создать сегмент управления внутри TableView которые имеют CustomCell для двух представлений для сегмента управления.

https://www.youtube.com/watch?v=dw7kytoA3KU&t=198s - прекрасный пример того, что я пытаюсь выполнить, но пользователь помещает вставки 1 CustomCell, и код немного сбивает с толку.

Моя первая CustomCell содержит изображения, имена и номера. Мой второй CustomCell содержит только изображение.

Так что мои вопросы...

  1. Как мне создать два массива для двух 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")]
  1. Из того, что я исследовал, когда пришло время вызывать файл CustomCell и два CustomCell в мой код, это будет правильно?

     let nib = UINib(nibName: "CustomCell", bundle: nil)
     tableView.register(nib, forCallReuseIdentifier: "CustomCell1")
     tableView.register(nib, forCallReuseIdentifier: "CustomCell2")
    
  2. Что для этого нужно вернуть?

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int

  3. Эта часть, где я запутался в том, что вводить

    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.

Другие вопросы по тегам