点击表格的 cell 做控制器跳转, 控制器的名字和一些其他信息存在字典里, 比如字典的 Key 是控制器的名字, 对应的 Value 是页面的标题, 这时候该怎么做呢.
import UIKit
/// cell 重用标示
private let cellid = "MainViewController_CELL_ID"
class MainViewController: UIViewController {
//MARK: - 属性组
var tableView: UITableView!
//MARK: - 在这里添加控制器的名字和列表要显示的名字
let listArray = [
["AViewController": "A 页面"],
["BViewController": "B 页面"],
["CViewController": "C 页面"],
]
//MARK: - 生命周期
override func viewDidLoad() {
super.viewDidLoad()
//设置页面
setUpView()
}
/// 设置页面
private func setUpView() {
tableView = UITableView(frame: UIScreen.main.bounds)
tableView.dataSource = self
tableView.delegate = self
view.addSubview(tableView)
//注册 cell 重用的正确姿势
tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellid)
}
}
// MARK: - 实现表格的协议方法
extension MainViewController: UITableViewDelegate, UITableViewDataSource {
//MARK: 数据源
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return listArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellid, for: indexPath)
//使用字典的值作为标题 取字典 Value
cell.textLabel?.text = "\(indexPath.row + 1) \(Array(listArray[indexPath.row].values)[0])"
cell.textLabel?.textColor = UIColor(red:0.25, green:0.25, blue:0.25, alpha:1.00)
return cell
}
//MARK: 事件
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
//因为字典的 key 就是将要 push 进来的控制器的名字 取字典 Key
let vcName = Array(listArray[indexPath.row].keys)[0]
//把这个 key 转换成为类 需要加上命名空间前缀,否则不生效
if let cls = NSClassFromString(Bundle.main.nameSpaceStirng + "." + vcName) as? UIViewController.Type {
let vc = cls.init()
navigationController?.pushViewController(vc, animated: true)
}
}
}
// MARK: - Bunle 扩展
extension Bundle {
/// 获取命名空间
var nameSpaceStirng: String {
return infoDictionary?["CFBundleName"] as? String ?? ""
}
}
网友评论