2010-11-18 7 views

答えて

80

代表者メッセージをお送りします。

たとえば、加速度計デリゲートを使用すると、加速度計に関するメッセージが表示されます。

新しいニュートリノ検出デリゲートを使用すると、その領域で検出されたニュートリノについてのメッセージが表示されます。

PopUpsを使用すると、PopUpsからメッセージが送信されます。そして、そのやり方は、ポップアップの代議員と一緒です。多くの例があります。

したがって、代理人はメッセージを送信します。

これは簡単です。

"これらのメッセージはどこに送信されますか?"

答えはこれです:「デグリーゲート」を設定した場所にメッセージを送信します。

「代理人を設定する」ときには、メッセージの送信先を指定することができます。

したがって、

blah.delegate = amazingPlaceは "amazingPlace" にメッセージを送信します。

blah.delegate = somewhereElseは "somewhereElse"にメッセージを送信します。

blah.delegate =自己がメッセージを送信します...... です。あなたはちょうどそれがコード行を忘れるために、非常に一般的な間違いである「blah.delegate =自己」

言うよう

は非常に多くの場合、あなたは、メッセージは「あなた」に来てほしいです。

コード行を忘れてしまった場合は、詰め込みが行われます。メッセージはどこにもとなり、何がうまくいかなかったのか把握しようとすると頭が痛いままです。

他に何かする必要があります:デリゲートを使用する場合は、デリゲートを使用する必要があります。 Objective-Cのと昔では、あなただけ...これを行う

@interface AppDelegate_Pad : NSObject <UIApplicationDelegate> 
@interface BigTop : UIViewController <ASIHTTPRequestDelegate, UIPopoverControllerDelegate> 
@interface Flying : UIViewController <UIAccelerometerDelegate> 

あなたは「BIGTOP」の2人の代表者、すなわちASIHTTPRequestDelegateとUIPopoverControllerDelegateを使用したいことがわかります。 「フライング」は1人の代議員しか使用しないことを望んでいますが、加速度計を使用したいと考えています。スウィフトで

、それは簡単なことではありません - あなたはちょうどそのプロトコルカンマを持っている:

class YourClass:UIViewController, SomeDelegate, AnotherDelegate 

あなたは本当にすべての場所でデリゲートを使用せずにiPhone上で多くを行うことはできません。

参加者はどこでも、常にiOSで使用されます。

クラスでは十数人の代理人を使用することは完全に正常です。どこかに「フライング」のコードでは、上記の「フライング」の例では

それは、それはASIHttpRequestsためにどこかにデリゲートを設定しなければならない、BIGTOPの場合 [[UIAccelerometer sharedAccelerometer] setDelegate:self];

を言わなければならないでしょう

Swを持つ昨今
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 
[request setPostValue:gid forKey:@"gid"]; 
[request setPostValue:nom forKey:@"nom"]; 
[request setDelegate:self]; 

x.delegate=self[x setDelegate:self]と全く同じだった、Objective-Cのと昔に忘れてはいけません。)

IFTあなたは、単に

x.delegate = self 

を入力し、それはそれでお終いです。

これはあなたがやっていることです。代理人はメッセージを送ります。あなたはと言う必要があります。ここでは、メッセージの送信先はです。非常に典型的には、あなたは彼らがあなたに行くことを望んでいます。その場合は、単にx.delegate=selfと言います。

希望します。

+5

ちなみに、ニュートリノ検出の代表者は本当にありません。あなたは自分で書く必要があります。 – Fattie

+1

本当にありがとうございました。 –

+1

私はこれまで見たことがあります – SeanNieuwoudt

-3

どんな場合でもBourneの答えは役に立たない。代表者は基本的にオブジェクト上のイベントの反応であり、 ".delegate = self"はそれらのプロトコルが自己で採用されたことを意味する。テーブルビューの行のデリゲートメソッド "didSelectRowAtIndexPath"によって、ビューコントローラにテーブルビューがあると、 と "didSelectRowAtIndexPath"が定義されていると、tableviewで行が選択されたときに発生します。tableview .delegate = self "... と" self.anything "は、"何か "が自己のプロパティであると言うのに使われます。 たとえば、 NSString * anything; @property(nonatomic、retain)NSString * anything ;

"self.anything"

-1

Delegateは、データ/メッセージb/wクラスの2つのオブジェクトを渡し/通信するために使用されます。ここでtableView(送信者)はviewController(受信者)にデータ/メッセージを送信します。 UITableViewをカスタムで実装する例を検討するviewController ここでは、UITableViewDataSource & UITableViewDelegateというプロトコルが実際にはプロトコルです。残念ながら、UIKit Frameworkはオープ​​ンソースではありません。しかし、私は多くの記事を参照した後に内部的に何が起こるかを保証します。

プロトコルはバスケットボールのコーチのようなもので、いくつかの要件があります。彼/彼女は、クラス、構造体、enum what to do?のようなプレーヤーに、これらの要件を使用して指示します。しかし、He/She doesn't knowshow to do?によって、したがって、そのプロトコルに準拠するクラスまたは構造体は、ボールをダンクすることを達成しながら、それらの要件に実装を提供する必要があります。

protocol UITableViewDelegate { 
func tableView(_ tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
} 

プロトコルはDataSourceプロトコルであると言われています。プロトコルは、以下に示すように、常に「戻り値の型」を持つ必要な関数を含んでいます。

protocol UITableViewDataSource { 
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
} 

実装のUITableView

class viewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

    let tableView = UITableView()  

    override func viewDidLoad { 
     tableView.delegate = self 
     tableView.dataSource = self 
    } 

ここでカスタムのViewController内部、委任元(送信者)としてtableView作用デリゲート(受信機)として& viewController object i.e (self)

viewControllerにするためには、両方のプロトコルに準拠する必要があります。

したがって、viewControllerクラスオブジェクトは、両方のプロトコルに必要なすべての機能を実装しています。 selfは、UITableViewDelegateタイプまたはUITableViewDataSourceタイプのいずれかとして使用できます。これは、それに従うクラスのオブジェクトのタイプとしてプロトコルを使用できるためです。 tableViewの両方のプロパティ、すなわちdelegate & dataSourceは同じプロトコルタイプを持つため、selfに割り当てられています。

ユーザが選択すると、両方のプロトコルの非オプション機能が

プロトコルUITableViewDelegate機能

func tableView(_ tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
// Do further processes like pushing or poping another viewController 
} 

プロトコルUITableViewDataSource機能

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 10 
} 

func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    return UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: "Cell") 
} 

1)以下のようviewControllerクラスオブジェクトに実装されていますセクション内の行tableview(送信者)すなわちUItableView()を呼び出すパラメータtableView & indexPathにデータを渡すことで、オブジェクト(Receiver)にあるdelegateプロパティを使用して、以下の関数を示します。今度はviewControllerは、渡されたデータを使用して、新しいカスタムviewControllerにプッシュまたはポップするようなプロセスを実行します。 UITableViewDatasourceプロトコル内部

tableView.delegate?.tableView(UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 

2)機能tableview(送信者)にカスタムデータを提供します。 tableviewは、datasourceプロパティを使用してviewControllerオブジェクト(Receiver)に存在するパラメータtableView & indexPathにデータを渡してDatasource関数を呼び出すことによってviewControllerオブジェクトに問い合わせます。今すぐviewControllerは、&の戻り値を持つデータを使用して、カスタムデータバックtableviewを返します。今tableview

tableView.dataSource?.tableView(UITableView, numberOfRowsInSection section: Int) -> returns "10" 

tableView.dataSource?.tableView(UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> returns "cell" 

最後にindexpathで「セル」のセクション&種類の「10」のセルを作成するために、これらのデータを使用して、UIKit Framework全体はそのすべてのクラスで&データソースのデザインパターンを委任使用するようUIApplicationUITableViewUICollectionViewUITextField &などがあります。残念ながら、UIKit Frameworkはオープ​​ンソースではありません。

+0

ねえ、私はstackOverflowの初心者です。私の知っているいくつかの既知のQに答えるために周りを見回す! –

+0

答えは正しいです。投票しないでください!ちょうどbecozそれはすでに8年前に答えられています。 –

+1

ダウン投票は、答えが間違っているだけではありません。下の投票ボタンにカーソルを合わせると、ツールのヒントが表示されます。私はもっ​​と最近の質問に答えることを提案し、回答はまだありません。あなたはお気に入りのタグをつけることができ、より関連性の高い質問リストをフィルタリングします。そうすれば、新しい質問を見つけることができます。 – Fogmeister

関連する問題