Swift - Table View Controller

Swift - Table View Controller 首页 / iOS入门教程 / Swift - Table View Controller

在本教程的此部分中,无涯教程将使用TableViewController进行表视图。无涯教程还将使用原型单元和静态单元创建示例项目。

可以将TableViewController定义为专门用于管理tableview的ViewController。 TableViewController负责维护表及其数据和事件。为此,它使用其tableview属性的委托和DataSource。 TableViewController是继承UIViewController的UITableViewController类的实例。

class UITableViewController : UIViewController

当无涯教程只需要使用视图控制器显示tableview而没有其他内容时,无涯教程将继承UITableViewController类,因为无涯教程只能在接口构建器中将tableview添加到TableViewController中。 

    添加TableViewController

    要将TableViewController添加到接口构建器,请考虑以下说明。

    • 在XCode中创建一个新项目。在这个新创建的XCode项目中,无涯教程将获得以下文件集。
    iOS TableViewController

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

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

    它将在Storyboard中添加TableViewController。

    iOS TableViewController

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

    iOS TableViewController

    TableViewController组件

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

    iOS 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的项目的结构。

    iOS TableViewController

    接口构建器

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

    iOS TableViewController

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

    iOS TableViewController

    在这里,无涯教程还将需要一个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
        }
    }

    输出

    iOS TableViewController

    静态单元格

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

    iOS TableViewController

    默认情况下,它选择为动态原型。但是,无涯教程可以将其发给静态单元,如上面的图像所示。

    如果无涯教程将其更改为静态单元格,则TableViewController将改变其内容以具有具有三个静态单元的静态部分,如下图所示。

    iOS TableViewController

    无涯教程可以增加TableView中的部分数,也可以增加每个部分所包含的行数。如果无涯教程增加表查看中的部分数,无涯教程的TableViewController将看起来像以下图像。

    iOS TableViewController

    祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

    技术教程推荐

    深入浅出gRPC -〔李林锋〕

    微服务架构实战160讲 -〔杨波〕

    SQL必知必会 -〔陈旸〕

    网络编程实战 -〔盛延敏〕

    Redis核心技术与实战 -〔蒋德钧〕

    高楼的性能工程实战课 -〔高楼〕

    PyTorch深度学习实战 -〔方远〕

    B端产品经理入门课 -〔董小圣〕

    结构思考力 · 透过结构看思考 -〔李忠秋〕

    好记忆不如烂笔头。留下您的足迹吧 :)