使用外部类在tableView touch上更改视图控制器

时间:2018-06-03 16:09:26

标签: ios swift uitableview

我正在使用Swift开发iOS应用程序,我想知道如何在用户触摸单元格时更改视图控制器。我google了很多但我找不到任何东西。

我的代码:

class ViewControllerMain: UIViewController {

    @IBOutlet weak var tableView: UITableView!

    let customTableView = CustomTableView()

    override func viewDidLoad() {
        super.viewDidLoad()
        self.customTableView.tableData = ["item 1", "item 2", "item3"]
        self.tableView.delegate = self.customTableView
        self.tableView.dataSource = self.customTableView
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

}

然后:

class CustomTableView: UITableViewController {

    // I omitted a lot of overrides that are not useful for this question.

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)

        // Here I would like to redirect the user to another view controller, let's say "ExampleViewController".

    }

}

有没有办法在ViewControllerMain中指定在触摸单元格时必须显示的视图控制器?如果没有,我如何直接从CustomTableView重定向用户?感谢。

1 个答案:

答案 0 :(得分:0)

您可以使控制器CustomTableView成为其视图的数据源和委托。这意味着将表格视图的模型(["item 1", "item 2", "item3"])移动到表视图控制器CustomTableView。 (另外,我重命名了;控制器不应该命名为“...查看”。):

class CustomTableTableViewController: UITableViewController {
let examples = ["item 1", "item 2", "item3"]

    override func viewDidLoad() {
        super.viewDidLoad()
    }
    // MARK: - Table view data source
    override func numberOfSections(in tableView: UITableView) -> Int {

        return 1
    }
    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let exampleViewController = storyboard?.instantiateViewController(withIdentifier: "AstoryboardSceneID")
        navigationController?.pushViewController(exampleViewController!, animated: true)
    }
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return examples.count
    }
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        let example = examples[indexPath.row]
        cell.textLabel?.text = example

        return cell
    }

您必须在Interface Builder中设置标识符,如下所示:

Setting view controller identifier