在UITableViewDelegate扩展

时间:2017-01-12 06:01:27

标签: ios swift xcode swift-extensions

我没有将视图控制器指定为UITableViewDelegate,而是尝试通过为UITableViewDelegate创建扩展来减少视图控制器中的代码。

为什么我收到错误"使用未解析的标识符companyDetailVC"对于行companyDetailsVC = CompanyDetailsViewController(),当这是正确的Swift 3语法?

代码

extension TableViewDelegate: UITableViewDelegate {
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        companyDetailsVC = CompanyDetailsViewController()
        self.present(companyDetailsVC, animated: true, completion: nil)
    } 
}

编辑:我试图以编程方式执行此操作而不使用故事板。我创建了UITableViewDelegate扩展程序,因为我试图减少View Controller中的代码。

2 个答案:

答案 0 :(得分:1)

呈现Viewcontroller的代码应该有点像这样 和扩展应该像

extension YourClassNameHere: UITableViewDelegate {
    //then your did select method comes here and in that put this code for presenting the viewcxontroller
    let companyDetailsVC = CompanyDetailsViewController() //change this to your class name
    self.present(companyDetailsVC, animated: true, completion: nil)
}

答案 1 :(得分:0)

用以下代码替换您的代码。您需要提供ViewController来创建其扩展并使用它的属性和方法。

确保在控制器中声明companyDetailsVC。在从块中调用之前,您不需要使用self。

extension yourViewController: UITableViewDelegate {
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    self.companyDetailsVC = CompanyDetailsViewController()
    self.present(companyDetailsVC, animated: true, completion: nil)
  }    
}