SwiftTableViewController
在本教程的此部分中,无涯教程将使用TableViewController进行表视图。无涯教程还将使用原型单元和静态单元创建示例项目。
可以将TableViewController定义为专门用于管理tableview的ViewController。 TableViewController负责维护表及其数据和事件。为此,它使用其tableview属性的委托和DataSource。 TableViewController是继承UIViewController的UITableViewController类的实例。
class UITableViewController : UIViewController
当无涯教程只需要使用视图控制器显示tableview而没有其他内容时,无涯教程将继承UITableViewController类,因为无涯教程只能在接口构建器中将tableview添加到TableViewController中。
添加TableViewController
要将TableViewController添加到接口构建器,请考虑以下说明。
- 在XCode中创建一个新项目。在这个新创建的XCode项目中,无涯教程将获得以下文件集。

在上面显示的图像中,无涯教程获得了由XCode生成的项目文件,以运行单个视图iOS应用程序。它还会生成一个ViewController.swift文件,该文件将分配到情节提要中的Single View Controller。删除此文件并创建UITableViewController的新子类,如下图所示。

- 在main.storyboard文件中,删除ViewController,搜索对象库中的TableViewController,并将结果拖动到接口。

它将在Storyboard中添加TableViewController。

如果无涯教程运行上述项目,它将使以下输出作为空TableView。

TableViewController组件
以下图像在TableViewController中显示各种可见组件。

- TableView - UITableViewController包含一个内置的tableview。可以通过使用TableViewController子类中的tableView属性来访问情节提要中的tableview。 tableview是UITableView类的实例。
- TableViewCell - tableview单元格显示tableview控制器的实际内容。 TableViewCell是UITableViewCell类的实例。该单元格包含一个UIView类型的内容视图。无涯教程可以将自定义子视图添加到tableview单元中的内容视图。
- NavigationController - 导航控制器是控制情节提要中ViewController之间关系的控制器。嵌入NavigationNavigator中的所有ViewController都包含导航栏,无涯教程可以在其中放置标题和栏按钮项。导航栏是UINavigationBar类的实例。无涯教程可以相应地显示或隐藏tableview控制器的导航栏。
示例1:创建简单的TableViewController
在此示例中,无涯教程将创建一个简单的TableViewController,在其中无涯教程将以表格形式显示数据网格。
项目结构
自定义tableviewcontroller子类继承了UITableViewController类,并符合UITableViewDelegate和UITableViewDataSource协议,这使自定义子类覆盖了UITableViewDelegate和UITableViewDataSource协议的所有方法。下图显示了包含TableViewController的项目的结构。

接口构建器
在Main.StoryBoard中,删除现有的UIViewController,搜索UITableViewController,并将结果拖动到Storyboard。这将创建具有原型单元格的TableView控制器,如下图所示。

由于TableViewController包含原型单元格,无涯教程需要使用内容视图开发此原型单元。在此示例中,无涯教程正在开发具有title,subtitle和detail的原型单元。为此,无涯教程会将UILabel拖动到TableViewCell,如下图所示。

在这里,无涯教程还将需要一个UITableViewCell子类来包含这些UILabel连接。
MyTableViewCell.swift
import UIKit class MyTableViewCell: UITableViewCell { @IBOutlet weak var titleLbl: UILabel! @IBOutlet weak var subTitleLbl: UILabel! @IBOutlet weak var detailLbl: UILabel! override func awakeFromNib() { super.awakeFromNib() //Initialization code } override func setSelected(_ selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) //Configure the view for the selected state } }
mytableviewcontroller.swift
import UIKit class MyTableViewController: UITableViewController { var titleArr = Array<String>() var subTitleArr = Array<String>() var detailArr = Array<String>() override func viewDidLoad() { super.viewDidLoad() subTitleArr = ["Goa","Himachal Pradesh","Uttarakhand","Andman and Nicobar", "Mumbai"] titleArr = ["Punjim","Shimla","Dehradun","PortBlair","maharashtra"] detailArr = ["7 m", "2276 m", "447 m","16 m","14 m"] } //MARK:- Table view data source override func numberOfSections(in tableView: UITableView) -> Int { return 1 } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { //#警告执行不完整,返回行数 return titleArr.count } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! MyTableViewCell cell.titleLbl.text = titleArr[indexPath.row] cell.subTitleLbl.text = subTitleArr[indexPath.row] cell.detailLbl.text = detailArr[indexPath.row] return cell } override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return 130 } }
输出

静态单元格
与TableView不同,无涯教程还可以在TableViewControllers中嵌入静态单元格。要添加静态单元格,无涯教程需要在界面构建器的属性检查器中更改单元格类型,如下图所示。

默认情况下,它选择为动态原型。但是,无涯教程可以将其发给静态单元,如上面的图像所示。
如果无涯教程将其更改为静态单元格,则TableViewController将改变其内容以具有具有三个静态单元的静态部分,如下图所示。

无涯教程可以增加TableView中的部分数,也可以增加每个部分所包含的行数。如果无涯教程增加表查看中的部分数,无涯教程的TableViewController将看起来像以下图像。
祝学习愉快! (发现内容有误?请选中要编辑的内容 -> 右键 -> 修改 -> 提交!帮助我们改进教程质量)
精选教程推荐
👇 以下精选教程可能对您有帮助,拓展您的技术视野
暂无学习笔记,成为第一个分享的人吧!
您的笔记将帮助成千上万的学习者