IBのオブジェクトにXcodeからコードでアクセスするにはどうすればよいのでしょうか?
InterfaceBuilder上で配置したビューや、すでにあるウィンドウなどの、
コード上で定義されていないオブジェクトに、コードでアクセスしたいのですが、やり方がわかりません。。。
例えば、最初にXcodeで新規ファイルを作ると、InterFaceBuilderのdocウィンドウ内にwindowのアイコンがすでに作られていますよね?
このNSWindowインスタンス(キーウィンドウ)から、ある別のインスタンスにデリゲートする際、
InterfaceBuilderでwindowアイコンから、その別のインスタンスにデリゲートの接続線を引っ張ることで実現していますが、
そうではなく、コードのみで接続できるのかどうか、ということが知りたいです。
ご存知の方、教えてもらえると助かります!
No.2ベストアンサー
- 回答日時:
> Xcodeのバージョンは3.2.2、OSは10.6です。
了解しました。
ただし今回は、バージョンは関係なく、じっさいのコードを見なければ、回答できない内容でした。
Interface Builderで生成するインスタンス(AppControllerのインスタンス)は、初期化メソッド「init~」で、初期化処理を行うと、うまくいかないことが、よくあります。
今回の件でいうなら、メソッド「init」が実行される時点で、まだウインドウ「myWin」が生成されていないかもしれないからです。myWinが存在しない段階で、myWinのDelegateを指定することはできません。
Interface BuilderのNib(xib)からインスタンスがすべて生成されたことが保証されてから、初期化処理をするには、NSObjectのプロトコル「NSNibAwaking Protocol」にある、メソッド「awakeFromNib」に記述します。
- (void)awakeFromNib
{
[myWin setDelegate:self];
}
としてみてください。
早速ありがとうございます。
試してみたところ、今度はばっちりできました!
それで、もう一つ疑問なのですが、IB上にあるオブジェクトにコードで定義したオブジェクトを接続するには、必ずアウトレットやバインドなどのIBでの接続操作が必要になるのでしょうか。
別の言語なのでまったく概念が違うかもしれませんが、
actionscript2.0などでは、
ステージ上に配置したインスタンスを操作したい場合、
そのインスタンスの名前をコードに記述して直接アクセスします。
こうしたことはXcodeではできない、と考えてよいでしょうか。
始めたばかりでまだわからないことが多く。。
的を外した質問かもしれませんが、
教えていただけると助かります。
よろしくお願いします!
No.3
- 回答日時:
> それで、もう一つ疑問なのですが、IB上にあるオブジェクトにコードで定義したオブジェクトを接続するには、必ずアウトレットやバインドなどのIBでの接続操作が必要になるのでしょうか。
できないことはないと思いますが、それをしなければならない局面というものを、どうしてもイメージすることができません。
インスタンスを、動的に操作するのなら、Interface Builderでなく、コードでインスタンスを生成するのが、ふつうです。
> 始めたばかりでまだわからないことが多く。。
> 的を外した質問かもしれませんが、
おそらくそのとおりだと思いますが、これもまた、あなたがなさりたいことを、ソースコードを見て判断しないと、なんともいいようがありません。
それと、Flashでオーサリングすることと、Cocoaプログラミングすることを、同列に並べないほうがいいでしょうね。冷凍食品を、電子レンジでチンすることと、一流料理店のシェフが、いちから調理することを、同列に並べるのと、同じことですからね。
お返事、ありがとうございます。
>インスタンスを、動的に操作するのなら、Interface Builderでなく、コードでインスタンスを生成するのが、ふつうです。
まだまだそこまで到達していないので、
これから勉強したいと思います。
>それと、Flashでオーサリングすることと、Cocoaプログラミングすることを、同列に並べないほうがいいでしょうね。
そうですよね。
まだイマイチCocoaの感覚がわからず、変な例を挙げてしまいました。
すみません。。
初歩的な質問に丁寧にお答え頂き、ありがとうございました!
No.1
- 回答日時:
Xcodeのバージョンを教えてください。
Xcodeは、ひんぱんにインターフェイスを変更しているので、バージョンが0.1違っただけでも、説明が通用しないケースが、多々あります。
基本は、ヘッダファイルの「@interface」内に、「IBOutlet」と宣言して、インスタンスを記述します。
この回答への補足
大切な情報が抜けておりました。すみません。
Xcodeのバージョンは3.2.2、OSは10.6です。
回答頂いた内容、「なるほど」と思って早速試してみたのですが、うまくデリゲートできません。。
おそらくコードが間違っていると思うのですが、アドバイスいただけますでしょうか。
以下に記します。
(Xcodeで新しいクラス(名前はAppController)を作り、それに記述しています)
<ヘッダーファイル>
#import <Cocoa/Cocoa.h>
@interface AppController : NSObject <NSWindowDelegate>
{
IBOutlet NSWindow *myWin;
}
@end
<実装ファイル>
#import "AppController.h"
@implementation AppController
-(id)init
{
[super init];
[myWin setDelegate:self];
return self;
}
-(NSSize)windowWillResize:(NSWindow *)sender toSize:(NSSize)frameSize
{
NSSize mySize = frameSize;
NSLog(@"success");
mySize.width = mySize.height * 2;
return mySize;
}
@end
アウトレットmyWinは、IBでメインのウィンドウに接続しています。
どこがまずいのか、アドバイスお願いします!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(ソフトウェア) Figma 1 2023/06/23 14:22
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- JavaScript オブジェクト配列の各メンバを任意の式で評価して、その評価値が最大のオブジェクトを返す関数はありますか 2 2023/05/20 15:02
- その他(プログラミング・Web制作) pythonで、tkinterとpillowの組み合わせ 2 2022/08/16 17:42
- フリーソフト AutoHotKeyは別の独立したファイルで 動作させる方法はないのでしょうか 1 2022/09/04 13:14
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Visual Basic(VBA) 起動中のアプリ、ソフトの取得 3 2022/12/28 11:13
- Excel(エクセル) 【エクセルマクロ】既に開いているIEの、サイズや表示位置を変更するには 4 2022/12/01 22:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数名の付け方
-
複数の変数を宣言する時、同時...
-
private static という変数の修飾
-
インスタンス参照でアクセスで...
-
生成したインスタンスを削除す...
-
VB.NET getとsetの概念がわかり...
-
String a = "a"; と String b =...
-
C#において、同じインスタンス...
-
文字列を日付に変換でParseExce...
-
他のファイルの変数参照
-
フォームの存在をチェックする方法
-
変数の参照でエラーが出てしま...
-
C# インスタンスの破棄
-
C#「オブジェクト参照が必要で...
-
javaのクラスの作り方、エラー...
-
オブジェクト参照がオブジェク...
-
SerialPort処理でInvokeメソッ...
-
「インスタンス」の意味をわか...
-
【java】コンストラクタの処理...
-
インスタンスを同じ名前で作成...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数名の付け方
-
インスタンス参照でアクセスで...
-
private static という変数の修飾
-
VB.NET getとsetの概念がわかり...
-
C# インスタンスの破棄
-
複数の変数を宣言する時、同時...
-
C#において、同じインスタンス...
-
生成したインスタンスを削除す...
-
SQLを連続発行する時の正しい(?...
-
文字列を日付に変換でParseExce...
-
変数の参照でエラーが出てしま...
-
エクセル(複数インスタンス)...
-
フォームの存在をチェックする方法
-
VB6.0で、DLLを動的に参照したい
-
String a = "a"; と String b =...
-
C#「オブジェクト参照が必要で...
-
newしないインスタンス?実体化...
-
「インスタンス」の意味をわか...
-
SetWindowsHookExで質問
-
フィールドでのnewとコンストラ...
おすすめ情報