我尝试以编程方式实现UITableView,而不使用xib或Storyboards。这是我的代码:
ViewController.swift
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let table: UITableViewController = MyTableViewController() let tableView: UITableView = UITableView() tableView.frame = CGRect(x: 10, y: 10, width: 100, height: 500) tableView.dataSource = table tableView.delegate = table self.view.addSubview(tableView) } }
MyTableViewController.swift
import UIKit class MyTableViewController: UITableViewController { override func numberOfSectionsInTableView(tableView: UITableView) -> Int { NSLog("sections") return 2 } override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { NSLog("rows") return 3 } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { NSLog("get cell") let cell = UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: "Cell") cell.textLabel!.text = "foo" return cell } }
但是当我运行应用程序时,我得到的只是空表。在日志中,我看到了sections和的几行rows,但没有get cell。如何修复此代码以获取包含6行foo文本的表格?
sections
rows
get cell
foo
注意: 正如您提到的,您刚刚开始在中进行编程Swift。我以编程方式创建了tableView。Copy和paste下面的代码放入您的文件viewController并 运行 项目…
Swift
Copy
paste
viewController
import UIKit class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { private let myArray: NSArray = ["First","Second","Third"] private var myTableView: UITableView! override func viewDidLoad() { super.viewDidLoad() let barHeight: CGFloat = UIApplication.shared.statusBarFrame.size.height let displayWidth: CGFloat = self.view.frame.width let displayHeight: CGFloat = self.view.frame.height myTableView = UITableView(frame: CGRect(x: 0, y: barHeight, width: displayWidth, height: displayHeight - barHeight)) myTableView.register(UITableViewCell.self, forCellReuseIdentifier: "MyCell") myTableView.dataSource = self myTableView.delegate = self self.view.addSubview(myTableView) } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { print("Num: \(indexPath.row)") print("Value: \(myArray[indexPath.row])") } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return myArray.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath as IndexPath) cell.textLabel!.text = "\(myArray[indexPath.row])" return cell } }
输出: