« Cocoaはじめの一歩+α 練習問題0 | メイン | Applescriptの魅力ないし魔力 »

Cocoaはじめの一歩+α 練習問題0のつづき

Cocoaはじめの一歩というサイトの歩き方です。
Cocoaはじめの一歩にある練習問題を通じでXcodeとobjective-Cになじもうとする企画です。

前回は練習問題0をやってみようといいながら、日本語の表示の興味が湧いてしまいましたが、本来の練習問題はInterfaceBuilderを使用してNSTextFieldのデザインを変更しようというもの。

NSTextFieldのマニュアルをみると、setTextColorやsetBackgroundColorといったメソッドがあるのでプログラムからこのメソッドをつかってデザインを変更してみましょう。

追加問題
1.NSTextFieldの文字の色をランダムに変更するボタンを作りましょう
2.NSTextFieldの背景の色をランダムに変更するボタンを作りましょう(上とほとんど同じですね)
3.NSTextFieldの編集可否をトグルするボタンを作りましょう

問題をどのように解いてもかまいませんし、あなたがNSTextFieldのマニュアルから気に入ったメソッドを試してみてもかまいません。とにかく自分で試してください。

追加問題解答のヒントやオプション仕様です。
InterfaceBuilderにボタンを3つつけましょう。上の1〜3の操作を行うものです。
・編集可否をつけるボタンはトグルボタンにしてみましょう。
・ボタンを押したら音が出るようにしてみましょう。
・ランダムな色を作りだす部分は1と2で共通ですので、メソッド(サブルーチンです)を作成しましょう。
なんか作りたくなってきたでしょう?
出来上がりイメージです。

解答です。


IBでボタンを付けるのはできますね。コントローラに追加したボタンから接続されるactionを3つ追加します。勿論actionとボタンを紐付けてくださいね。
トグルボタンの設定を行うために、インスペクタのアトリビュートパネルを開きましょう。
ウィンドウに配置したボタンをクリックして⌘+iキーを押します。
インスペクタ上部のセレクタがattributesになっていることを確認してください。
Behavior:のところをOn/Offにしてみましょう(トグルとかいてしまいましたがOn/Offの方が良さそうなので)。勿論、IBでテストをしてあなたの気に入ったものにしてもらってかまいません。

テスト方法はOKですか?
⌘+rキーでテストモードになります。ボタンを押したりすることが可能です。インターフェースのテストなのでプログラムの部分は動きません。
終了したら⌘+qキーでIBにもどることができます。

そうそう、ボタンに音をつけましょう。
好奇心旺盛はそして注意深いヒトは気がついていたかもしれませんが、インスペクタにSound:の項目があります。
この項目で設定できそうですね。でも、肝心の音はどこにあるのでしょう。
これまた好奇心旺盛はそして注意深いヒトはピンとくるかもしれません。
MainMenu.nibウィンドウ(インスタンスやクラスを表示させるウィンドウです)にSoundというタブがあり、デフォルトでいくつかの効果音が用意されています。
ここにある音ファイルを先ほど配置したボタンにドラッグ&ドロップをすればOKです。
ドロップ後にはインスペクタにファイル名が表示されます。
このSoundタブに外部ファイルをドラッグ&ドロップすることも可能です。
ちなみにxillionはSubmarineという音を選びました。
IBの設定はこれでOKですが、.hファイルへの反映をお忘れなく。手動でもかまいません。

いよいよプログラミングです。
まずNSTextFieldの編集可否を切り替えるボタン。


- (IBAction)button1:(id)sender
{
    if    ([textField isEditable])
        {
            [textField setEditable:false];    
        } else {
            [textField setEditable:true];            
        }
}

isEditableメソッドで現在の状態を確認して、setEditableをtrueにするかfalseにするかを決め、メッセージをウィンドウのNSTextFieldオブジェクトに送信します。

次に色を変えるボタンのアクションをコーディングします。


- (IBAction)button2:(id)sender
{
    [textField setTextColor:[self randomColor]];    
}

- (IBAction)button3:(id)sender
{
    [textField setBackgroundColor:[self randomColor]];    
}

setTextColorメソッド、setBackgroundColorメソッドをそれぞれ使用しますが、引数に[self randomColor]を設定しています。これは次に作るランダム色を取得するメソッドです。
このメソッドのリターンをsetTextColorで変更する色として使うという意味です。
このようにメッセージはネストさせることができます。

ではランダムな色を作成するメソッドを作成しましょう。

- (NSColor*)randomColor {     return [NSColor     colorWithCalibratedRed:SSRandomFloatBetween(0.0, 1.0)                                     green:SSRandomFloatBetween(0.0, 1.0)                                     blue:SSRandomFloatBetween(0.0, 1.0)                                     alpha:SSRandomFloatBetween(0.0, 1.0)];      }

setTextColorなどの引数に使用するため、NSColorオブジェクトをリターンします。ランダムな色の作成方法としては、colorWithCalibratedRed:green:blue:alpha:の各引数をランダムに設定して、以て、ランダムなカラーを得ようとするものです。
各引数のランダムな値はSSRandomFloatBetween関数で取得します。
マニュアルを見ると、この関数はScreen Saver Functionに含まれています。
このような手法が正しいのかどうか不明ですが、あるものは使ってしまいましょう。
.hファイルに#import とインポートを行えばこの関数が使えるようになります。インポートをしないとコンパイルでエラーとなります。

また- (NSColor*)randomColorメソッドも.hファイルに記載しましょう。
記載がない場合[self randomColor]の部分でコンパイラがウォーニングを出します。

おつかれさまでした。以上でできあがりです。
Exercise0.zip



ひとつ前の投稿は「Cocoaはじめの一歩+α 練習問題0」です。
次の投稿は「Applescriptの魅力ないし魔力」です。

トラックバック

このエントリーのトラックバックURL:
http://www.xillion.net/mova/mt-tb.cgi/280

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2008年02月16日 15:21に投稿されたエントリーのページです。

メインページアーカイブページも見てください。

Powered by
Movable Type 3.34