1

これを行うための最良のアプローチを見つけようとしています。ビュー コントローラーに 5 つのカスタム ボタンがあり、ボタンがクリックされた場合にボタンを強調表示したままにしようとしています。これを行う方法は知っていますが、一度に 1 つのボタンのみを強調表示できるようにしようとしています。そのため、ユーザーがボタンをクリックして強調表示し、別のボタンをクリックすると、最後にクリックされたボタンが強調表示されたままになり、前のボタンは強調表示されなくなります。これを達成するための最良の方法は何ですか?

4

2 に答える 2

3

すべてのボタンへの参照を保持する必要があります(たとえば、IBを使用する場合は、@property (nonatomic, strong) IBOutlet UIButton *button1;すべてのボタンのようにコードにリンクを含めます)。

次に、すべてのボタンを同じ方法にリンクして、ボタンを押します。私はそれを呼びますbuttonPressed

このようにそれを実装します:

- (IBAction)buttonPressed:(id)sender {

    UIButton *buttonPressed = (UIButton*)sender;
    NSArray *buttons = [NSArray arrayWithObjects:_button1, _button2, _button3, nil];
    bool buttonIsHighlighted = NO;

    // Check if a button is already highlighted
    for (UIButton *button in buttons) {

        if (button.highlighted) {

            buttonIsHighlighted = YES;
        }
    }

    // If a button is highlighted, un-highlight all except the one pressed
    // If no button is highlighted, just highlight the right one
    if (buttonIsHighlighted) {

        for (UIButton *button in buttons) {

            if (buttonPressed == button) {

                buttonIsHighlighted = YES;

            } else {

                button.highlighted = NO;
            }
        }

    } else {

        buttonPressed.highlighted = YES;
    }
}

このコードをテストすることはできませんが、動作するはずです。何か問題があれば教えてください。

于 2013-02-22T15:48:52.283 に答える
0

解決策 1: ボタンを にNSArray配置し、ユーザーがボタンをクリックしたときに、別のボタンが強調表示されているかどうかを確認します。の場合YESは、強調表示を解除し、押されたものを強調表示します。の場合NOは、押されたものを直接強調表示します。

@interface解決策 2: 強調表示されたボタンを、または で宣言されたグローバル変数に保存できます@property。ユーザーが新しいものをクリックすると、前のものの強調表示が解除されます。

于 2013-02-22T15:38:03.840 に答える