0

メインの nib (nib1) には、次のコードを使用して別の nib (nib2) をアクティブにするボタンがあります。

現在、nib2 に値を渡し、nib2 から取得する方法は、nib1 でクラス メソッドを作成することです。しかし、この演習プロジェクトの私の目標の 1 つは、後の別のプロジェクトで nib2 を再利用できるように nib2 を設計する必要があることです。これは、nib2 が nib1 のクラスについて何も認識してはならないことを意味します。そのため、後で nib2 を再利用するときに、そのコードを変更する必要はありません (nib1'class メソッドを呼び出すため)。

nib2のクラスにクラスメソッドを作ろうと考えていました。しかし、nib2 がアクティブになる前にメソッドを呼び出すにはどうすればよいでしょうか?

私のアプローチは正しいですか?コメントはありますか?

NSWindowController *iQWController = [[NSWindowController alloc] initWithWindowNibName:@"iQueryWindow"];
[iQWController showWindow:sender];
4

1 に答える 1

1

この例では、クラス定義 nib1.h/nib1.m/nib1.xib と nib2.h/nib2.m/nib2.xib があると仮定します

データを nib 2 に取得するには、nib2 にプロパティを作成する必要があります。

nib 2 から nib 1 にデータを戻すには、デリゲート プロトコルを定義し、nib 1 にそれを実装させ、nib 2 のデリゲートとして設定する必要があります。

nib2.h は次のようになります。

@protocol Nib2Delegate;

@interface Nib2 : UIViewController {
    id <Nib2Delegate> delegate;
}

@property (nonatomic, assign) id <Nib2Delegate> delegate;

@end

@protocol Nib2Delegate 

- (void)myMethod;

@end

Nib1.h では、次のようになります。

#import "Nib2.h"

@interface Nib1 : UITableViewController <Nib1Delegate> {

}

- (void)myMethod;

@end

Nib1.m で

Nib2 *nib2 = [[Nib2 alloc] initWithNibName:@"Nib2" bundle:nil];
nib2.delegate = self;

次に、Nib1.m に myMethod を実装します。Nib2.m で呼び出す場合は、次のようになります。

[delegate myMethod];
于 2011-05-19T02:30:42.620 に答える