これは私の状況です。私はviewControllerを持っています。これには、コンテナビューに埋め込まれたtableViewControllerが含まれています。次に、私は3つのクラスを持っています:TableViewCell、TableViewControllerとViewController。プロトタイプのセルには、TableViewCellクラスに接続されたボタンがあります。誰かがそのセルのボタンを押すと、ViewController内のメソッドを実行したいと思う。そのために、いくつかのプロトコルとデリゲートを作成し、ボタンを押してViewControllerに指示しました。TableViewControllerで二重デリゲートを作成する
私はあなたに私のコードをお見せしましょう:
これは私の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'タイプで使用できないというエラーメッセージがあります。
問題を解決する方法がわからない、誰かが助けてくれますか? ありがとう
?それはコード(コードを表示)またはストーリーボードを通じて行われますか? – rmaddy
ストーリーボードを通じて追加されました。 –
ストーリーボードでは、VCにコンテナビューを配置し、コンテナからtableVCにドラッグして「埋め込み」を選択しました。 –