2016-07-19 6 views
0

ラジオボタングループとしてカスタムボタンを実装しようとしています。ラジオボタンの外観(各状態のオン/オフ/ホバー)をカスタマイズする方法が見つかっていないので、カスタムイメージボタン(NSButtonサブクラス)として実装しました。その部分は正常に動作します。問題は、ボタンの各グループの状態と、グループによって決定される対応する変数(グループごとに1つ)を処理することです。 IBCollectionsはこの問題に適しています。しかし、私はMacアプリを書いています。カスタムラジオボタンのOSX(2016 Redux)でのIBOutletCollections代替

ここで私がOS X *のIBOutletCollectionsで見つけられる質問は、数年前です。私は評判の点が欠けているので、私は彼らに尋ねることもできないので、新しい質問です。

私が読んだIBCollectionsのブログ投稿がiOS/UIKitとして指定するのは気にならず、XCodeはエラーを表示しませんでした(とても助かりました!/皮肉なことに)彼らは非常に助けになりました。

これを達成する別の方法はとにかくありますか?個々のアウトレットは、これらのようなボタンのグループ(または悪い複数のグループ)の狂気です。 IBOutletsとIBActionsでIB定義ボタンの配列として実装できますか?

*すぐに総額挑戦でしょうが:)

答えて

0

をマックOS(の状態に戻すには、私はそれはエレガントな解決策だと主張しませんが、私は、各ボタンにNSArray arrayWithObjects:でカスタムボタンをグループ化することによって、私の問題を解決するために管理グループ。

私は(カスタムカラーボタンについては、このケースでは)ラジオボタンの動作をエミュレートするには、2つのメソッドを追加しました:ユニークな選択を必要とボタンの私の特定の問題関わる複数のグループとして

-(void)setButtonSelected:(NSArray*) theButtons toColor:(NSString*)color { 
    [self clearAllButtons:theButtons]; 
    for (ColorButton *button in theButtons) { 
     if ([button.color isEqualToString:color]) { 
      button.state = NSOnState; 
     } 
    } 
} 

-(void)clearAllButtons:(NSArray*) theButtons { 
    for (ColorButton *button in theButtons) { 
     button.state = NSOffState; 
    } 
} 

を、私はその後の配列を追加しました(列は基本的に)グループ内の位置合わせされたオプションのそれぞれについて。

- (void)clearColorConflicts:(NSArray*)theButtons forRow:(NSString*)row { 
    for (ColorButton *button in theButtons) { 
     if (![button.row isEqualToString:row]) { 
      if (button.state == NSOnState) { 
       button.state = NSOffState; 
      } 
     } 
    } 
} 

また、それは優雅な解決策ではないかもしれませんが、IBOutletCollectionなしで私の問題を解決しました。

NSMatrixを調べましたが、カスタムボタンをマトリックスとしてグループ化したときに、カスタムイメージボタンの動作(on、off、hover_on、hover_off)を使用できませんでした。

列グループは2つの独自の方法で処理できますが、別の行の選択によって行/カテゴリ選択がクリアされると、変数/デフォルトの更新手順が追加されます。後見では、選択後に各グループの状態を確認できました。

私の問題はユニークかもしれませんが、他の人に役立つ場合に備えて私はこれを投稿しています。

私は誰かが私より優れた解決策を持っていることを願って解決しているとは言えません。