2011-06-20 7 views
3

私はまだiOSの初心者ですから、最近はたくさんのチュートリアルをやっています。多くのIBOutletsを使うのは良い習慣ですか?

たとえば、電卓のようなアプリを作っていたら、24個のボタンがあるとします。私は、ボタンのラベルがどのボタンであるかを知るために使用されるサンプルコードを見てきましたが、それは特に、アプリケーションを翻訳しようとすると、本当に不思議そうです。

弾丸を噛んで、各ボタンごとに1つのIBOutletを用意するのが良いでしょうか?なぜ、または、どうしてですか?

もしそうでなければ、MVCのパラダイムにとどまっているうちに、これを行うにはどうすれば最もエレガントな方法でしょうか?


私はちょうど私のコードで背中を見ていたし、今私はもっと以前よりnoobのように感じて[OK]を...私は本当にIBActions話していたので、あまりないIBOutlets ...私はの全体の束を持っているべき異なるボタンのIBActions?ここでは、viewController.hファイルで、今のようになります。

- (IBAction)digitPressed:(UIButton *)sender; 
- (IBAction)operationPressed:(UIButton *)sender; 
- (IBAction)dotPressed:(UIButton *)sender; 
- (IBAction)button_mClear_Pressed:(UIButton *) sender; 
- (IBAction)button_mPlus_Pressed:(UIButton *) sender; 
- (IBAction)button_mMinus_Pressed:(UIButton *) sender; 
- (IBAction)button_mRecall_Pressed:(UIButton *) sender; 
- (IBAction)button_AC_Pressed:(UIButton *) sender; 
- (IBAction)button_PlusMinus_Pressed:(UIButton *) sender; 

理由だけで、私には反復的で洗練さを感じないということ?

答えて

2

IBOutletsを使用してInterface Builder/Xcode 4で配線する場合、プログラミング上の決定よりも味わいがあります。そうするかどうかは、必ずしもMVCのパラダイムに影響するとは限りません。

あなたのビューコントローラーに24個のIBOutletを保存し、ペン先からボタンをロードするのはあなたの選択です。インターフェースに入れておくほうが簡単かもしれませんし、ボタンでいっぱいの配列を持っていてプログラムであなたのビューを表示し、適切なアクションでそれらを設定します。

編集
また、別のViewControllerのために異なるニブのボタンを持つことができます - 簡単なコマンドと高いコマンドや関数、数字パッドのために言うことができます。各ビューコントローラには特定のプロトコルのデリゲートがあり、これらのプロトコルはすべて「BrainController」で実装されます。この設定は単純な電卓では少し過度のものかもしれませんが、IBOutletsでオーバークラウドされたviewcontollerを使用せずに。また、他のプロジェクト、つまりリモートコントロールインターフェイスを備えたアプリのナンバーパッドでoartを再利用することもできます。

+0

ああ、私はBrainControllerのアイデアが好きです...それで、残りのView Controllerはすべてそのサブクラスですか?たとえば、リンゴの電卓には、2つのビューがあります... 22個のボタンを備えたポートレートビュー、46個のボタンがあるランドスケープビュー、より広い表示、より高い精度、deg/rad表示...どのようにして正確にそれをニブとビューコントローラの観点から設定するのでしょうか?特に、あまり進んでいないビューにある元のボタンを再利用していますか? –

1

XIBと多くのオブジェクトを使用する場合は、はい。後でコードでメソッド呼び出しの際にボタンを無効にするなど、オブジェクトを何か特別なものにすることを計画している場合は、YES、IBOutletを接続します。 IBActionsにのみボタンを接続している場合は、いいえ、IBActionに何もボタン(IBOutletなし)を接続するだけで、たくさんのオブジェクトを接続する際の手間が省けます。

3

通常、類似したボタンアクションにはすべて同じアクションがトリガーされますが、同様のボタンアクションには共通のコードが必要です。 tagプロパティを使用して、クリックされたボタンを識別します。たとえば、数字ボタンは特定のアクションをトリガーし、オペレーターボタンは別のアクションをトリガーし、以下同様である。

- (void)didClickOperatorButton:(id)button 
{ 
    switch ([button tag]) 
    { 
     case kAdditionOperation: 
      // Do the addition operation ... 
      // etc.. 

tagプロパティは、Interface Builderの任意のコントロールで設定できます。

+0

それは妥当と聞こえる。それは私がやっていることはある程度です。私はタグの事を見てみましょう...それは良い意味があります。 –

関連する問題