0

NSWindow に NSMattrix を配置しました。この NSMattrix には 2 つのラジオ ボタンが含まれています。

3 つの IBOutlets を宣言しました: - NSMattrix 用に 1 つ - 各ラジオ ボタン (NSButtonCell) 用に 1 つ。

1 つの IBAction メソッドを宣言しました。これと同じメソッドを、NSMattrix の各ラジオ ボタン ant にリンクしました。このメソッドは、ラジオ ボタンの状態を変更すると自動的に呼び出されます。偉大な。しかし、この方法で各ラジオボタンの状態を知りたい場合、状態が良くありません。

イベントメソッドで各ラジオボタンの状態を取得するにはどうすればよいですか?

ありがとう

4

2 に答える 2

1

すべてが IBOutlets 経由で接続されている場合は、必要なときにいつでも 2 つのボタンの状態を照会できます (View Controller がこれらのアウトレットを所有している場合、またはそれらのアウトレットが@propertyアクセサーを介して公開されている場合)。

buttonOnebuttonTwoがNSButton であると仮定するとIBOutlet、次のように簡単に実行できます。

- (IBAction) buttonAction: (id) sender
{
    BOOL buttonOneIsOn = ([buttonOne state] == NSOnState);
    BOOL buttonTwoIsOn = ([buttonTwo state] == NSOnState);
}

NSCell(NSButtonCellから派生) には非常に便利なstateメソッドがあります。ドキュメントをリンクしました。

于 2012-06-28T05:58:49.587 に答える
0

このような場合には、Cocoa バインディングを使用することを強くお勧めします。これは、バインディングを使用する最も簡単な方法の 1 つです。

バインディングを使用すると、ユーザー インターフェイスの同期が自動的に処理されます。これは、ラジオ ボタンの状態を実際に問い合わせる必要がないことを意味します。ボタンがバインドされているプロパティを照会するだけです。

アクション メソッドを実装する代わりに、必要なのはプロパティだけです。たとえば、- (BOOL) radio1;- (void) setRadio1:(BOOL) flag;- (BOOL) radio2;および- (void) setRadio2:(BOOL) flag;(ただし、メソッドにはそれよりも適切な名前を付けます)。@propertyこれらは、Objective-C の以降のバージョンで使用できます。それぞれBOOLのクラスにフィールドを配置します。

NIB/XIB ファイルを編集しているときに、プロパティをラジオ ボタンに割り当てることができます。

キー値コーディングの規則により、はメソッドとの両方が呼び出されるself.radio1ことを暗黙的に意味するパスです。それらの名前を別の名前に変更した場合は、それに応じてパス名を調整してください。radio1setRadio1

NIB/XIB を編集するときは、NSMatrix の各ボタン セルを順番に選択し、適切なバインドを設定します。

  • 値バインディングを「ファイルの所有者」に設定します (プロパティが実装されている場合)。
  • 適切なプロパティのキー パスを使用します (self.radio1またはself.radio2、上記の例のメソッドがある場合)。

NSMatrix は、一度に 1 つの値のみを許可するように既に設定されているため、プロパティ値も同様に制限されます。

于 2012-06-28T06:30:43.000 に答える