2017-06-21 16 views
0

私は委任を介して関数内に存在する変数を渡しています。ほとんどの場合、すべてがうまくいくようです。私が把握できない唯一のことは、デリゲートをどのように設定するかということです。 "foo".delegate = selfデリゲートを設定する方法/場所

通常はこれは簡単ですが、私はクラスの代わりに関数内にある変数を使っているため、fooが何であるか分かりません。あなたの参照

のプレースホルダ)

はここでのプロトコルです:

:ここ

protocol TagToIndexDelegate { 
func finishPassing (dictionary:Dictionary<Int,Int>) 
} 

は私がから変数を送信しようとしています機能です

extension MyCell: YSSegmentedControlDelegate { 

func segmentedControl(_ segmentedControl: YSSegmentedControl, willPressItemAt index: Int) { 
    tagToIndex[actionButton.tag] = index 

    delegate?.finishPassing(dictionary: tagToIndex) 
} 

func segmentedControl(_ segmentedControl: YSSegmentedControl, didPressItemAt index: Int) { 

}} 
delegateはタイプ TagToIndexDelegateである

、そしてwillPressItemAt内に存在する変数tagToIndexは私が渡していたデータです。

そして最後に、クラスIはTagToIndexDelegate

class AnswerViewController: UIViewController, TagToIndexDelegate { 

func finishPassing (dictionary: Dictionary <Int, Int>) 
{ 

} 


override func viewDidLoad() { 
    super.viewDidLoad() 

} 
} 

を実装しようとしていますが、私はそう任意のヘルプや批判が大幅に高く評価され、デリゲートを使用してはかなり新しいです。

おかげで、

ニック

+0

私はここで何が起こっているか完全にはわかりません。デリゲートが 'MyCell'の一部である場合、' MyCell'を初期化する者はデリゲートを設定しませんか?それはどこに起こるのですか? – Ssswift

+0

あなたはviewDidLoadの中で試してみましたか? – Boris

答えて

0

AnswerViewControllerと仮定すると、質問に参照されるテーブルビューおよび細胞を含むビューコントローラである、それはおそらく、テーブルビューのデータソースです。あなたがMyCellのインスタンスを作成しているいる

あなたUITableViewDataSource実装は、おそらく次のようになります。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let aCell = tableView.dequeueReusableCell(withIdentifier: "my_cell_reuse_id") as! MyCell 
    return aCell 
} 

何がしなければならないことは、単にselfにデリゲートを設定されている:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let aCell = tableView.dequeueReusableCell(withIdentifier: "my_cell_reuse_id") as! MyCell 
    aCell.delegate = self 
    return aCell 
} 

delegateは、MyCellのプロパティであると仮定しています。

class MyCell: UITableViewCell { 
    var delegate: TagToIndexDelegate? 
} 
+0

MyCellは実際には、セルを作成するためのすべてのデータを含むカスタムクラスです。必要に応じて、コード全体を投稿することができます。助けてくれてありがとう。 –

+0

確かに、進んでください。 – paulvs

関連する問題