2016-07-11 13 views
0

すでに存在するiOSオブジェクトで委任を使用する方法を理解しています。たとえば、UITableViewのインスタンスを作成し、そのビューコントローラがUITableViewデリゲートに準拠している場合、UITableViewデリゲートのさまざまなメソッドを実装できます。 didSelectRowAtIndexPathが呼び出されたときなど、新しく作成されたテーブルは通知を受け取ることができます。iOSデリゲートは実際にどのように機能しますか?

私の質問はなぜ私のテーブルは、この特定の代理コールバックを取得したのですか?私の理解は、デリゲートは実装されていないメソッドのリストに過ぎないということです。私にはもっと多くのことが起こるはずです。本当に "舞台裏で"何が起こっているのですか?

画像私は、次のすべてのデリゲートメソッドの名前を変更した場合: - mysteryMethod1 - mysteryMethod2 - これらのメソッドのmysteryMethod3 ...など 一つは、特定のインデックスで行の高さを設定するための責任があります。もう1つの方法は、特定の行を編集することになります。

私が代表団について読んだことはすべて、代表者が代表と契約を結んでいると言います。デリゲートはメソッドを実装することを約束します。それが起こると、何とかすべてが正しく配線され、すべてが魔法のように機能します。私が見ていない魔法は何ですか?

+1

デリゲートの仕組みを説明する数千のチュートリアルがあります。ランダムな説明の1つが利用可能です。 [ここ](https://www.natashatherobot.com/explaining-ios-delegates-a-story-about-your-morning-coffee/)。 – holex

答えて

0

デリゲートが実際にどのように動作するかを知るためには、最初に独自のカスタムデリゲートを作成する必要があります。その方法では、魔法がないことがわかります。おそらく実際のリンゴの実装を見ることはできませんデリゲートメソッドで構築しますが、私はそれらに実装された多くのロジックがあることを保証しますが、それはプライバシーの理由から利用できません。カスタムデリゲートのは、例えばとしましょう...

を作成すると あなたは、クラスAがあり、このクラスでは、あなたがこのようなデリゲートプロパティを持っている。このクラスではプロトコル

protocol ClassADelegate: class { 
func changeBackgroundColor(_ color: UIColor?) 
} 

を作成することから始め。

weak var delegate: ClassADelegate? 

はのは、このクラスでのViewControllerであり、あなたはUIbuttonようにそれにIBACtionを持っており、あなたの目標は、あなたがそのボタンをタップしたときにアプリ内の別のViewControllerが青にその背景色を変更することであるとしましょう。あなたがこれを行うクラスAで、このアクション...

func someAction() { 
delegate?.changeBackgroundColor(.blue) 
} 

の内部では、 は、あなたがのUITableViewを使用して、デリゲートに考えている場合は、「魔法」のUITableViewはクラスであることを考える方法により、クラスAに、ここで起こることを言ってみましょうA.

これで色を変更したいクラスBがあります。 まあ今クラスBはあなたにもプロトコルに準拠同じように、このようなプロトコルに準拠する必要がUITableViewDelegateなど

class ClassB: UIViewController, ClassADelegate { 
} 

今秒間ワードデリゲートを考えると、それは、あなただけであることを意味するものだと思います責任を他の人に委任していますよね?はい、この場合、ClassBはdelegateプロパティにアクセスするためにClass BのクラスAのインスタンスを持つ必要があるため、ClassBは委譲されます。

let classa = ClassA() 
classa.delegate = self 

最後の手順は、このようなプロトコルのメソッドを呼び出すことです。

func changeBackgroundColor(_ color: UIColor?) { 
view.backgroundColor = color 
} 

ヨーヨーがあなたのクラスでこのメソッドを参照してくださいしかし、あなたは、プロトコルの実装へのアクセスを持っていない場合、あなたは「ここで、この魔法の色から来ない?」を自問します締結しますしかし、あなたが見たように、プロトコルが属する別のクラスからのものであり、これが役立つことを望みます。

関連する問題