1.Interface Builder とは 2.はじめよう 3.保存について 4.操作方法 5.インスペクタ |
6.コネクト(接続)のやり方 7.サブクラスの作成 8.サブクラスのインスタンスの作成 9.作業の流れ | 番外.Cocoa# |
|
直接これに触れる必要はないかもしれません。 |
保存した時に生成されるファイルは、 .nib ファイル1個 だけです。
|
マウスドラッグ | GUI部品の配置, Connect時の併用。 |
マウスクリック | メニューなどで、項目の決定。アクションを選択。 配置されたGUI部品を調べたり、選択したり、移動させたりする。 |
ダブルクリック | 配置されたGUI部品を調べる。 メインウインドウのインスタンス-アイコンに対して行うと、元のClass が表示される。 Window や MENUの場合は、配置のためのオブジェクトが表示される。 |
SHIFT + Command + i | Inspector (インスペクタ)を出す。 Inspector は、インスタンスや GUI 部品の属性や詳細な情報を表示します。 (メニューのTool から Show Inspector を選択しても同じ) |
Control キー | オブジェクト同士を接続する時に使います。 |
インスタンス アイコン | ...その作成元にあたるクラス (Classesタブをクリックで切替) | アイコンを クリックで選択 | アイコンをダブルクリック (自動的にClassesタブに切替わる) | Inspector パレット |
File's Owner | NSObject>NSResponder>NSApplication | ---- | NSRsponder>NSApplication NSApplication Class Inspector | Attribute |
FirstRsponder | NSObject>FirstRsponder | ---- | FirstRsponder FirstRsponder Class Inspector | |
MainMenu | NSObject>NSMenu | NSMenu Inspector | Mainmenu オブジェクト出現 | |
Window | NSObject>NSResponder>NSwindow | NSWindow Inspector | Window オブジェクト出現 | |
Custom SubClass | NSObject のサブクラス | ---- | NSObject>ApplicationControl ApplicationControl(Custom)Class Inspector |
設定可能なパレット インスタンス、メニューオブジェクト、Class によってそれぞれ違います。 切替えでプルダウンメニューのパレット項目が見つからない場合は強制的にAttributesパレットに変更されてしまいます。 インスタンス選択時に設定可能なパレット 1.Attributes 2.Connctions 3.Size 4.Bindings 5.CustomClass 6.Accessibility 7.Help 8.AppleScript 9.Sherlock NSForm(TexField のグループ) , NSMatrix (ラジオボタンのグループ)には、さらに10.Prototype という項目がある。 Class : Classカラム表示時のパレット 1.Attributes 2.Connections 3.Size 4.CustomClass 5.Accessibility 6.Help ※メニューオブジェクトのインスタンスを ダブルクリックした時のパレット 1.Attribute 2.Sharlock 3. AppleScript | Inspector のパレット一覧 ○: 設定可能/△: 空欄のみ/ ×: Not Applicable 戻: Attributesに戻る
|
各パレット概要 Attributes オブジェクトの色や属性を設定。Classの場合はOutletとActionを設定。 Connections Outlet, Target/Action Size オブジェクトの位置と、幅と高さを設定する。 Autosizingで、ウインドウの大きさに追随も可能。 Bindings Cocoaバインディングを設定。コントローラオブジェクトを使ってビューをモデル側から動的に変化させる場合に関連付けを行います。変数埋込みなど。 CustomClass Superクラスをカスタムクラスに置換えるらしい。 Accessibility AuXiliary acessibility atrributesの関連付け。(参考) Help ToolTip(HelpTags)を記述する。マウスをかざすと黄色いボックスと説明文がポップアップします。 AppleScript イベントに対応するAppleScriptを扱う。 Sherlock Sherlock チャネルをGUI部品と関連づける。 Prototype 複数のGUI部品が構成された要素を扱う |
実際の手順Prototype パレット
構成要素の元になる部品を一括変更可能なprototypeの設定があります。
この中にある Type項目を変更すると、 チェックボックやラジオボタン、決定ボタン等にも変更できます。
Attributeパレット
主に行列構成の設定と、prototype設定の確定を行います。
行列構成の設定は、 raws,columns欄に値を入れ、横raw個 x 縦column個 の行・列を生成します。
またprototype設定の確定は、prototype設定後に、Attributeパレットの「Match Prototype」ボタンを押します。
(この時「Match Prototype」ボタンを押さず、raw, columnを変更すると、異なった種類の prototype のGUI部品を行・列 に追加可能です)
★1.GUI部品、NSMatrix (ラジオボタンのグループ)を配置。 |
★1.オブジェクト同士の接続(ウインドウ間をまたぐことも可能)。
−ボタン(Button)から テキストフォーム (Form) に接続する場合−
1. 対象(Form)を選択した状態で、
2. Control キーを押したままにする。
3. 対象(Button)をマウスで押して(起点に四角い印■が出現)
4. ドラッグする(ズビズビっと、線が伸びる)、
5. 接続したい対象(Form) まで引っ張る。
6.マウスボタンを離す。
★2.接続すると、部品同士がつながったように見えますが、まだ接続が有効になっていません。
★3.次に、Inspector ウインドウを開き、ボタンを押した時の Form に対するAction (takeIntValueFrom)を設定。
★4.「Connect」ボタンを押して初めて接続が確定されます。
サブクラスのインスタンスを作成★1.メインウインドウのClassタブを選択し、カラムから、元にするクラスオブジェクト(NSObject)を選択
★2.メニューから「SubClass NSObject」を選択
★3.カラムリストに、myObject という名前のサブクラスが作成されます。使う場合は、myObject という名前を適切な名前(この例ではApplicationControl)に変更しておきます。
★4.メインウインドウのClassタブを選択し、カラムから、元にするクラスオブジェクト(ApplicationControll)を選択
★5.メニューから 「Instanate ApplicationControl」を選択
★6.メインウインドウに、ApplicationControl という名前の サブクラスオブジェクトの アイコンが作成されます。サブクラスオブジェクトに接続。
Model .......... main.m 本体のソースコードController と Model に、Controllerを含めてもOK。 メインウインドウの、サブクラスインスタンスのアイコンをダブルクリック。 ApplicationControl Class Inspector から
Controller..... controller.m, controller.h (GUI操作を行うサブクラス) Interface Builde で作成
View............ .nib (GUI部分) Interface Builde で作成
メモ (初期項目はどのInstanceでも「Attribute」固定) Inspectorウインドウで「Attribute」→「Connections」に変えておけば、他のInstanceを選択すると 「Connections」パレットで表示する。 Controllerという名前のClassを定義していて、 Inspectorウインドウのタイトルが、「Controller Class Inspector」ならClass定義を編集中。 「Controller Class(Custom) Inspector」となっていればインスタンスを編集中 |
GUI部品の配置メインウインドウで、Windos インスタンスをダブルクリックすることで、 GUI部品をレイアウトするためのウインドウが出現します。 また、この段階で必要ならばGUI部品同士を接続させておくことができます。 |
GUIコントローラをサブクラスで作成メインウインドウのClassタブを選択し、NSObject のサブクラスを作成。 コントローラの名前をつけます。myObject を ApplicationController という名前に変更。 NSObjectを選択したままで、右クリックで「NSObject subclass」を選択。※NSApplicationからサブクラスを作る場合もあるようです。 Classes タブで、作成したサブクラス名を選択したまま Inspector のAttributeパレットを選び、編集。 |
Outlet の作成Outletとは、出入力インターフェースです(プラグ差し込み口のようなもの)。ApplicationController Class Inspector を表示させて、Attribute パレット から、Outrets タブを選択し Add ボタン。 Outletname という識別名 と、Type(型)を設定して、作成します。 ここで設定したTypeは 配置したGUI部品に対応したものを用意します。 |
Actionの作成Action はOutletに接続するためのメソッドです。Action Nameで識別され、この名前の最後には必ずコロン「:」が付きます。ApplicationController Class Inspector を表示させて、Attribute パレット から、Actionタブを選択しし Add ボタン。 Action Name を設定します。 ここで設定した名前はApplication Controller クラスや、それを制御するソースコードでも使われることになります。 |
GUIコントローラのサブクラスから、インスタンスを作成ApplicationController を選択したままで、右クリックで「NSObject Instance」を選択。 インスタンスを作ってはじめて、メインウインドウに立方体のアイコンが出現します。これがサブクラス ApplicationControllerのインスタンスです。 1.メインウインドウのインスタンス-タブ上 File's Owner → ApplicationController へ接続。 2. File's Owner Inspector のConnectionパレットで、Outlet を 「Delegate」 に選択し、「Connect」ボタンを押す。 ※Delegateとは、代表とか権限を委任するとかいう意味。 盾のようになって処理を代行できるオブジェクトのこと。継承と違って動的な制御ができるそうです。 アプリケーションを操作するのに、NSApplication のサブクラスを作る代わりに、NSApplicationのDelegateで済ますこともできるらしい。 |
GUIコントローラのインスタンスをDelegateにする詳しい事は良くわからないけど、これを行わないとアプリケーションコンパイル時に詰まります。
File's Owner と Window に対してApplicationController を Delegateにする:
File's owner から ApplicationController へ 接続 Window から ApplicationController へ 接続 それぞれ、Inspector のConnections パレットのOutlet項目の Delegate に自動的にフォーカスが移るので、Connection ボタンを押して接続を確定します。 ApplicationControllerがnibファイル内の機能を一手に引き受けているし、起動時にウインドウも表示しなければいけないから、確かに代表(Delegate)といえる…。 |
Outlet の接続まず、ApplicationController(Custom)→ GUI部品 インスペクタの outlet/Actionを選択し「Connect」 |
Action の接続次に、GUI部品 → ApplicationController (Custom) インスペクタの outlet/Actionを選択し「Connect」 Action Nameの最後にはコロン「:」が付きます。 |
サブクラスを書き出すメインウインドウのClassタブで、サブクラスの Application Controlerを選択。メニューから、Class Create Files for Application Controler サブクラスのソースコードを書き出す。 ヘッダ(.h)、ソースコード(.m)、.nibファイルが作成されます。 |
1. system.windows.form による built-in scheme(X11) 2. system.windows.form による Gtk# (X11) 3. Cocoa# による Aqua インターフェイス(Cocoa)
モデル部 Main.cs// "cocoasharp.nib" を制御するための Controller // using は場合に応じて記述 using System; using System.IO; using System.Collections; using Cocoa; //【Application Controller Class】コントローラクラスの登録 [Register("<Controller Class名>")] public class<Controller Class名> : Cocoa.Object { // 【Outlet】アウトレット。 //Connect に続いて、アウトレット名とタイプを定義しておく(ボタンやウインドウ等) // アウトレットのタイプはC#のマネージド表現でなければいけません。例 NSButton → Button [Connect] public <アウトレットAのタイプ> <アウトレットAの名前>; //例: public Button btn; [Connect] public <アウトレットBのタイプ> <アウトレットBの名前>; //例: public Window win; // 【Application Controller Class の Protected コンストラクタ】必須 protected <Controller Class名>(IntPtr native_object) : base(native_object){} // 【Action】アクション。イベント名の最後には、コロン「:」が付きます。 // applicationWillFinishLaunching: アプリケーションが起動したというイベント発生。 [Export("applicationWillFinishLaunching:")] public void FinishLoading(Notification aNotification) { <アウトレットAの名前>.Value = <代入する値>"; } //【Action】アクション。 ボタンが押されたというイベントが発生。 // nibファイルのAction Nameで設定したアクション名を記述。 [Export("<アクション名>:")] public void <アクション名>(Cocoa.Object sender) { <アウトレットAの名前>.Value = <代入する値>; } }
ターミナルで、ビルドclass MainClass { public void Run() { Application.Init(); Application.LoadNib ("cocoasharp.nib"); Application.Run(); } static void Main(string[] args) { MainClass main = new MainClass(); main.Run(); } }
参考文献:gmcs -t:exe -out:Main.exe -r:/Library/Frameworks/Mono.framework/Versions/1.1.15/lib/mono/cocoa-sharp/cocoa-sharp.dll Main.cs macpack -m:2 -n:Main -o:. -a:Main.exe -r:/Library/Frameworks/Mono.framework/Versions/1.1.15/lib/mono/cocoa-sharp/cocoa-sharp.dll -r:cocoasharp.nib
$ mono path/to/monodocs2html.exe --source XML文書のあるディレクトリ --dest 展開先ディレクトリ名
mono /Library/Frameworks/Mono.framework/Versions/1.1.15/lib/monodoc/monodocs2html.exe --source /Users/user/Desktop/cocoa-sharp-0.9.1/doc/en/ --dest /Users/user/Desktop/cocoa-sharp-0.9.1/monodochtml/
// Connect に続いて、アウトレット名とタイプを定義しておく
[Connect]
//例:public <アウトレットAのタイプ> <アウトレットAの名前>;
public Button button2;
Cocoa NamespaceWebKit Namespace
- ActionHandler ………イベントによって呼び出されるメソッドの形式を定義する
- Alert ………NSAlert のマネージド表現(managed representation).
- AlertStyle ………Alertによるスタイルの定義.
- Application ………NSApplication class のマネージド表現
- Array ………NSArray のマネージド表現.
- AutoreleasePool ………NSAutoreleasePool のマネージド表現
- BackingStoreType ……… windowのためのBacking store type( ウィンドウが隠されたときに描画部分を保持する仕組み)
- BezierPath ………NSBezierPath のマネージド表現
- Browser ………NSBrowserのマネージド表現
- BrowserCell ………ANSBrowserCell のマネージド表現
- Bundle ………NSBundleのマネージド表現
- Button ………NSButtonのマネージド表現
- CachedObject
- CalibratedRGBColor ………NSCalibratedRGBColorのマネージド表現
- Cell ………NSCellのマネージド表現
- CellStateValue ………指定したセルの状態
- CFString
- CFTimer
- Color ………NSColorのマネージド表現
- ConnectAttribute
- Control
- DeviceRGBColor
- Dictionary
- DragDestination
- DragOperation
- Drawer
- ExportAttribute
- FileWrapper
- Image
- ImageView
- MenuItem
- MethodSignature
- MutableArray
- MutableString
- Native
- Native+ClassHandlerDelegate
- Native+IMPDelegate
- Notification
- ObjCMessaging
- Object
- OpenGLView
- OutlineView
- Pasteboard
- Point
- PopUpButton ……… NSPopUpButtonのマネージド表現
- ProgressIndicator
- Rect
- RegisterAttribute
- Responder
- RunLoop
- Screen
- SearchField
- Size
- StackPadding
- String
- TableColumn
- Text ………NSText classのマネージド表現
- TextField
- TextView ………NSTextViewのマネージド表現
- Timer
- URL
- URLRequest
- URLResponse
- View
- Window
- WebBackForwardList
- WebDataSource
- WebFrame
- WebHistoryItem
- WebView