1

ご挨拶、

「SquareClass」という NSObject クラスを作成したビュー ベースのアプリケーション プロジェクトがあります。ここで、Xcode のインターフェイス ビルダーから、UI コントロール (つまり、テキスト ボックス、ボタンなど) からアクションを作成するときに、その「SquareClass」をグローバル スコープの正方形オブジェクトにインスタンス化できるようにしたいと考えています。 )、それらのアクション内でそのオブジェクトのメソッドを呼び出せるようにしたいと考えています。

例:

(void)MyAction1:(id)color
{
   [square setColor:color];
}

(void)MyAction2:(id)width
{
   [square setWidth:width];
}

ご覧のとおり、正方形のオブジェクトにはグローバル スコープが必要です。これは簡単に思えるかもしれませんし、間違ったやり方かもしれません。Web を調べたところ、.xib ファイルではなく、.nib ファイルの方法が見つかりました。

どんな提案でも大歓迎です。どうもありがとう。

ヨハン。

ps: これは私の初めての投稿です。

4

3 に答える 3

3

まず、NIB ファイルは、あらゆる意味で XIB ファイルと同じです。これは、XIB ファイルのコンパイル済みバージョンにすぎません。

NIB/XIB で NSObject から派生したオブジェクトを作成するには、NSObject をライブラリ ウィンドウからファイルにドラッグするだけです。次に、Identity Inspector でクラスをカスタム クラスに変更します。

次のようなメソッドを定義する場合:

- (IBAction)myAction:(id)sender

Interface Builder でそれらを接続できます。

そうは言っても、あなたがしていることは正しいことなのかどうかを判断するのは難しい. NSViewController サブクラスを使用する必要があるように思えますので、そのドキュメントをご覧ください。

また、ビュー、コントローラー、およびモデル オブジェクトとは何かを理解していることを確認する必要があります。これについてはたくさんの文献があります。

于 2009-06-08T04:50:24.823 に答える
1

UIViewを拡張するクラスを作成する場合は、xibのファイルの所有者に拡張クラスを実装させることができます。その時点から、正方形の拡張クラスにインスタンス変数を追加するだけです。プロセスの最後のステップは、クラスにメソッドを追加して、各コントロールをアクションにバインドすることです。

- (IBAction) pinSelected: (id)sender;

これらのメソッドを作成したら(必ずIBActionを返すようにしてください。実際にはvoidのエイリアスですが、Interface Builderへのヒントとして機能します)、ファイルの所有者を介してコントロールをメソッドにバインドできます(control+dragを使用してリンク)。

幸運を!

于 2009-06-04T14:04:59.690 に答える
0

XIBファイル内で行われていない、必要なことを行う方法を見つけました。上記の提案は有効ですが、私が思っていたよりもずっと簡単です。

正方形のオブジェクトを使用するには、ヘッダー ファイルを参照する必要がありました。

 #import "square.h"

SquareUIViewController.h で、正方形オブジェクトへの参照を追加します。

Square *square;

次に、SquareUIController.m で、他の処理を行う前に正方形のオブジェクトを割り当て/初期化する必要があります。

(IBAction)myInit
{
square = [[Square alloc] init];
}

これで、最初の投稿のメソッドを使用できるようになりました。

ps: 批評家たちよ、燃え上がれ!

于 2009-06-10T14:17:56.063 に答える