disableにする

コピー機の設定画面ではよく設定同士の排他制御をします.ようするに一緒に設定できない設定を,事前に設定させないようにするというものです.設定させないようにするために,該当するボタンを押せないようにします.

今回はUISegmentedControlを使ったので,セグメントごとの押下を無効にしたいと思います.IB上にはenableのチェックボックスがあるので,おそらく関数から設定可能なのでしょう.そこでヘルプからクラスリファレンスをみてみました.


ざっとObjective-Cの記述方法は読んでいたのですが,やっぱり理解できていないことが判明.もういちどiPhoneSDKプログラミング大全を見直してようやく引数の使い方を理解.引数1にはラベルが無いのね.不思議.あとBOOLの設定がTRUE/FALSEじゃなくてYES/NOっていうのも変わってる.

最終的に以下のような記述で上手くいきました.

[dpisegmentField setEnabled:NO forSegmentAtIndex:3];

とりあえずif-elseで全部記載.これでなんちゃって排他制御が出来るようになりました!

でもdisableのときの表示が微妙.テキストがちょっと太くなって微妙に薄くなってるぐらい.ここも変えられないみたい?でした.
以下は[A3]がdisableになっているのですが,見えないですね.

画面を作る

半年ほど前にいちど,もとまかさんのチュートリアルを参考にじゃんけんゲームを作ってみたことがありました.今回画面を作るにあたって,すぐに出来るだろうと思っていましたが,チュートリアル通りに作ったのでは全然理解できていないことが判明..

もういちどこのチュートリアルをもとに,今回の画面を作ってみました.
手順は以下.

1.XcodeでView-Based Applicationを作成
 今回はスキャナ設定を行う画面にするので,プロジェクト名をScansettingAppとしました.
2. ScansettingAppViewControllerのソースコードのスケルトンがはかれるので,ヘッダファイルに追記.
 今回は画面にのせる予定の選択肢用ボタンUISegmentedControl と値を反映するテキストフィールド用の変数を用意しました.

IBOutlet UILabel *dpiSelectedLabel;
IBOutlet UISegmentedControl *dpisegmentField;
IBOutlet UILabel *sizeSelectedLabel;
IBOutlet UISegmentedControl *sizesegmentField;

3.同様に処理内容を.m ファイルに追記.
 今回は選択されたらその値をテキストに反映するだけのシンプルなものを作成しました.どれが選択されたのかを判定するのはUISegmentedControlのindexをみれば良いということは分かっています.そこで,じゃんけんゲームのチュートリアルを参考に,UISegmentedControlに変化が起きた(ValueChanged)時にイベントを受信して,そのときにどのindexが選択されているかを判定するようにしました.

4.受信用の関数をヘッダファイルに用意
 今回は解像度(dpi)の変更と読み取りサイズ(scanSize)の変更の二つを用意しました.

  • (IBAction)dpiUpdate:(id) sender;
  • (IBAction)sizeUpdate:(id) sender;

これで選択したものが表示されるようになりました.


ただ気になったことが一つ.
UISegmentedControlは横の伸縮は自由で,セグメントごとのサイズも自由に設定できるのですが,縦方向にのばすことが出来ません.
高さの設定は触れないようになっていました.画面デザインのガイドラインでもあるのでしょうか,,