6

私のゲームには 8 つの UIButton が設定されています。いずれかが選択されると、それが選択されていることを示し、もう一度クリックすると、選択されていないことが示されます。ただし、ボタンを選択し、他の7つが選択されている場合は、選択されていない状態になるようにしたいと思います。

を使用してこれを行う方法は知っています[buttonName setSelected:NO]が、問題は、buttonTwo が既に buttonOne に渡されている場合、buttonOne を buttonTwo に渡すことができないことです。両方のヘッダーが互いにインポートしている場合、解析エラーがスローされます。私はしばらくこれに固執しており、誰かが私の問題を解決してくれることを望んでいました。

助けてくれてありがとう。

4

10 に答える 10

12

現在のボタンの親ビューを取得し、内部のすべてのボタンを反復処理して、すべての選択を解除します。次に、現在のものを選択します。

// Unselect all the buttons in the parent view
for (UIView *button in currentButton.superview.subviews) {
    if ([button isKindOfClass:[UIButton class]]) {
        [(UIButton *)button setSelected:NO];
    }
}

// Set the current button as the only selected one
[currentButton setSelected:YES];

:コメントで提案されているように、ボタンの配列を保持して、上記のコードが親ビューのサブビューで行うのと同じ方法でそれを調べることができます。これにより、ボタンを含むビューに他の多くのサブビューが含まれている場合に、コードのパフォーマンスが向上します。

于 2013-09-02T13:24:33.183 に答える
2

この質問に答えるには遅すぎることは承知していますが、わずかなコード行で回答しました。これが私がしたことです:

NSArray *arrView = self.view.subviews;
    for (UIButton *button in arrView) {
        if ([button isKindOfClass:[UIButton class]]) {
            [((UIButton *) button) setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        }
    }
[button1 setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal];
于 2016-02-19T14:08:56.040 に答える
0

「両方のヘッダーが互いにインポートしている場合、解析エラーがスローされます」に答えるには...

.h ファイルで #import をできるだけ使用することは控え、代わりに、使用したいものを前方クラス宣言として宣言する必要があります。

@class MyCustomClass

@interface SomethingThatUsesMyCustomClass : UIViewController

@property (nonatomic, strong) MyCustomClass *mcc;

@end

次に#import、.m ファイルのヘッダー:

#import "MyCustomClass.h"

@implementation SomethingThatUsesMyCustomClass

-(MyCustomClass *)mcc
{
   // whatever
}

@end

#importこのアプローチにより、サイクルによるエラーが防止されます。

私は、このセットアップが少し奇妙に感じるという質問に対する SergiusGee のコメントに同意すると言わざるを得ません。

于 2013-09-02T13:26:03.880 に答える
0

ここでの最も簡単なアプローチはUIView、ボタンがオンになっている親を取得し、それを反復処理することです。私のコードの簡単な例を次に示します。

for (UIView *tmpButton in bottomBar.subviews)
{
  if ([tmpButton isKindOfClass:[UIButton class]])
  {
       if (tmpButton.tag == 100800)
       {
           tmpButton.selected = YES;
           [tmpButton setTitleColor:[UIColor greenColor] forState:UIControlStateNormal];
           [tmpButton setTitleColor:[UIColor greenColor] forState:UIControlStateHighlighted];

       }else{

          tmpButton.selected = NO;
          [tmpButton setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
          [tmpButton setTitleColor:[UIColor redColor]  forState:UIControlStateHighlighted];
        }
    }
}
于 2013-09-02T13:19:38.260 に答える