使用TableViewController创建双委托

时间:2017-09-21 22:07:30

标签: ios swift xcode uitableview

这是我的情况:我有一个viewController,它包含一个嵌入在容器视图中的tableViewController。然后,我有三个类:TableViewCell,TableViewController和ViewController。在原型单元格中,有一个连接到TableViewCell类的按钮。当有人按下该单元格中的按钮时,我想在我的ViewController中运行一个方法。为此,我创建了一些协议和委托,将按钮指向ViewController。

让我告诉你我的代码:

这是我的TableViewCell文件:

protocol TVCDelegate {
func cellClicked()
}

Class TableViewCell: UITableViewCell {

  var delegate: OtherVCDelegate?

  @IBAction func buyUpgrade(_ sender: Any) {
    self.delegate?.cellClicked()
  }

}

这是我的TableViewController文件:

protocol TVCToVCDelegate {
func sendThrough()
}

Class TableViewController: UITableViewController, TVCDelegate {

func cellClicked() {
    self.delegate?.sendThrough()
}

open var delegate: UTVToVCDelegate?

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cellIdentifier = "TableViewCell"

        guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as? TableViewCell else {
            fatalError("The dequeued cell is not an instance of TableViewCell.")
        }

        // Configure the cell...            
        cell.delegate = self

        return cell
    }
}

然后,我的ViewController文件:

class ViewController: UIViewController, UTVToVCDelegate {

  //MARK: Delegate Methods
  func sendThrough() {
      print("The delegate was completed succesfully")
  }

  override func viewDidLoad() {
      super.viewDidLoad()

      UpgradesTableViewController.delegate = self
  //ERROR: Instance member delegate can not be used on type 'TableViewController'
  }
}

但是,有一条错误消息,实例成员委托不能在类型'TableViewController'上使用。

我不知道如何解决这个问题,也许有人可以提供帮助,拜托? 感谢

2 个答案:

答案 0 :(得分:0)

对我来说,看起来你的问题是,你的UIViewController不知道你的TableViewController类的任何实例。您需要在UIViewController中实例化TableViewController,以便可以将委托分配给它。

编辑:在您的情况下,您需要将故事板中的插座拖到UIViewController并设置委托。

答案 1 :(得分:0)

错误告诉您不能在delegate类本身上使用UpgradesTableViewController属性。您需要在delegate

的实例上设置UpgradesTableViewController属性

ViewController添加插座,如下所示:

@IBOutlet var tableViewController: UpgradesTableViewController!

然后将故事板中的表格视图控制器连接到ViewController

中的此插座

最后,更改一行:

UpgradesTableViewController.delegate = self

为:

tableViewController.delegate = self