2017-09-21 6 views
0

これは私の状況です。私は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'タイプで使用できないというエラーメッセージがあります。

問題を解決する方法がわからない、誰かが助けてくれますか? ありがとう

+0

?それはコード(コードを表示)またはストーリーボードを通じて行われますか? – rmaddy

+0

ストーリーボードを通じて追加されました。 –

+0

ストーリーボードでは、VCにコンテナビューを配置し、コンテナからtableVCにドラッグして「埋め込み」を選択しました。 –

答えて

0

あなたの問題は、あなたのUIViewControllerはあなたのTableViewControllerクラスのインスタンスについて知りません。 UIViewControllerでTableViewControllerをインスタンス化する必要があるため、デリゲートを割り当てることができます。

編集:あなたの場合、ストーリーボードからUIViewControllerにアウトレットをドラッグしてデリゲートを設定する必要があります。

+0

どうすればいいですか? –

+0

rmaddyからの応答を参照 –

+0

私がrmaddyに書いたものを参照してください:) –

0

UpgradesTableViewControllerクラス自体でdelegateプロパティを使用できないというエラーが表示されます。 UpgradesTableViewControllerのインスタンスにdelegateプロパティを設定する必要があります。次のように

は、あなたのViewControllerにコンセントを追加します。

@IBOutlet var tableViewController: UpgradesTableViewController! 

を次に、あなたのViewControllerで、このコンセントにストーリーボードのテーブルビューコントローラを接続します。

UpgradesTableViewController.delegate = self 

へ:

は最後に、行を変更

tableViewController.delegate = self 
`TableViewController`のインスタンスが作成され、` ViewController`の子として追加されたどのよう
+0

ViewControllerへのコンセントとしてテーブルビューコントローラを接続できません...これは私がストーリーボードに持っているものです:ViewController。そのViewController内のコンテナビュー。コンテナへの「埋め込み」リンクを備えた別個のテーブルビューコントローラ。 –

関連する問題