-1

デリゲートの使用について迷っています。それらはオブジェクト間で値を渡すために使用されます。たとえば、ClassA が ClassB に値を渡す必要があるとします。デリゲートを使用する必要があります (少なくともそれが得られた場合)。

テキストフィールドとボタンを持つViewControllerAと、ラベルを持つViewControllerBがあるとしましょう。VControllerA のテキストフィールドから保存されたデータを VControllerB に渡すには、デリゲートを使用できます...

最初のクラスを見てみましょう

//ViewControllerA
#import <UIKit/UIKit.h>

@interface ViewControllerA : UIViewController {
IBOutlet UITextField *tf_text;
IBOutlet UIButton *but_add;
}

@property (nonatomic, retain) IBOutlet UITextField *tf_text;
@property (nonatomic, retain) IBOutlet UIButton *but_add;

-(IBAction)addAction:(id)sender;

@end

わかりました、これは他のものです

//ViewControllerB
#import "ViewControllerA.h"

@interface ViewControllerB : ViewController {

IBOutlet UILabel *_label;

}

@property (nonatomic, retain) IBOutlet UILabel *_label;

@end

さて、私は迷子になり始めます。このプロトコルを使用する正しい方法は何ですか? 新しいファイル controllerADelegate.h としてやりたいとしましょう

どのようにデータを渡す必要がありますか?

私はそれに夢中になっています、私は多くのオンラインチュートリアルを見ましたが、私はまだそれを使用する方法を本当に理解することはできません.

4

3 に答える 3

2

ビューコントローラー間でデータを渡したい場合は、 JuJoDiのリンクが必要です。

ただし、デリゲートは、「子」オブジェクトで何かが発生したときに「親」オブジェクトにコードを実行する機会を与える一種のコールバックと見なすことができます。

たとえば、UIScrollView にはデリゲート メソッドがあり、デリゲートscrollViewDidScroll:にスクロールしたことを伝え、何らかのコードを実行する可能性があります。ほとんどの場合scrollView.delegate = self、オブジェクトself(通常はこのステートメントを記述しているビューコントローラー) がスクロールビューのデリゲートになることを意味します。つまり、スクロールビューのデリゲート メソッド (これはUIScrollViewDelegate プロトコルで定義されていますが、独自のデリゲートを作成する場合を除き、心配する必要はありません)。

それが少し解決することを願っていますが、要するに、デリゲートはデータを渡すためだけではなく (パラメーターを持っていても、実際には別の目的のためです)、オブジェクト内で何かが発生したときにコードを実行するためのものです。 「親」オブジェクト (または実際にはクラス外のもの) について知る必要がある場合があります

于 2013-07-30T19:11:20.183 に答える
1

Apple がIOS チュートリアルで指摘しているように、デリゲートは、ビューのある部分から別の部分にデータを渡すためではなく、ユーザーがイベントを発生させたときにアプリケーションが反応できるようにするために存在します。たとえば、ユーザーが何かを編集しているときに、編集ウィンドウを閉じようとしたとします。システムはwindowShouldClose:ウィンドウのデリゲートにメッセージを送信します。デリゲートが存在し、メッセージを受け入れることができる場合、デリゲートは、保存されていない編集があることをユーザーに警告し、編集ウィンドウを閉じるかどうかを尋ねることができます。

デリゲートは通常、次のように宣言されid <NSWindowDelegate>、そのプロトコルを実装します。

コントローラーはデータ自体を渡すだけです。ごく普通のプログラミングです。

于 2013-07-30T19:08:53.387 に答える