TableView中的分段控件

时间:2017-07-29 17:42:59

标签: arrays swift tableview uisegmentedcontrol custom-cell

我花了好几个小时试图找到解决方案,但我总是一无所获。

我正在尝试在TableView内创建一个段控件,对于段控件有两个CustomCell个视图。

https://www.youtube.com/watch?v=dw7kytoA3KU&t=198s是我想要完成的一个完美的例子,但是用户插入了1个CustomCell并且代码有点令人困惑。

我的第一个CustomCell包含图像,名称和数字。 我的第二个CustomCell只包含一个图像。

所以我的问题是......

  1. 我应该如何为两个CustomCell创建两个数组?

    我正在努力完成的例子

  2. 自定义单元格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"]
    

    自定义单元格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

    4. 总结:我正在尝试在tableView中创建一个包含2个CustomCell的段控件。我希望段的第一个视图是具有图像,名称和编号的CustomCell。段的第二个视图只有图像。

      谢谢!

2 个答案:

答案 0 :(得分:0)

  

我应该如何为两个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做什么......你想让每个单元格都包含一个分段控件吗?那将是非常不寻常的。

答案 1 :(得分:0)

首先,我建议您浏览一些有关如何使用UITableViews和UISegmentedControl的教程,因为它看起来像是iOS开发的初学者。现在回答你的问题:

#1. How should I create two array for the two CustomCell?

我建议你学习在Swift中创建NSObjects。使用此功能,您可以在对象上设置名称,图像,数字等属性。然后,您可以拥有一个对象集合,并在您的数据源中使用它们。

#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,我建议你通过在你的UIViewController视图上添加一个UISegmentedControl和两个UITableView来最简单的方法。根据选择的段更改可见的UITableView,您可以在UISegmentedControl的值更改事件中捕获它。