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