0

私は多くのuibuttonを使用して一種のチェックシートを作成しており、コード(IBではない)を使用して追加しています。特定のボタンを選択すると、他のボタンは選択できないようにしたいと思います。たとえば、LOW、MEDIUM、HIGHのボタンが1列あります。ユーザーが2つのオプションを選択できるようにしたくありません(選択を変更したい場合は、一度に2つではありません)。

私は自分のメソッドの一般的な構造を知っています、そしてこれが私がこれまでに持っているものです:

-(void)addButtonsここで、ビューにボタンを入力します(ここには、ボタンを1つだけ表示しますが、多数あります)。

-(void)addButtons{

    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [button addTarget:self action:@selector(clicked:) forControlEvents:UIControlEventTouchUpInside];
    [button setTitle:@"" forState:UIControlStateNormal];
    button.frame = CGRectMake(209, 54, 127, 18);
    button.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    [imageView addSubview:button];

}

-(void)clicked:(UIButton *)sender これは、ボタンがクリックされたときに呼び出されるメソッドです。自分自身をパラメータとして送信してほしい。ボタンの外観が変わり、クリックされたことを示します。透明にする理由は、画像の上にボタンがあり、その下にあるものを確認する必要があるためです。sender.backgroundColor = [UIColor redColor];また、私が望むように機能するとは思いませんが、それは重要ではありません。

-(void)clicked:(UIButton *)sender{

    sender.alpha = 0.5;
    sender.backgroundColor = [UIColor redColor];

    [self setRelatedButtons:sender];

}

-(void)setRelatedButtons' そしてこれは、「セット」ごとに1つのボタンのみが選択されるようにする方法です。

-(void)setRelatedButtons:(UIButton *)sender{

    //since I know this button is clicked
    //set related buttons to unclicked

}

すべてを要約すると、これが私が疑問に思っていることです:

1)ボタンの外観を選択したままに設定するにはどうすればよいですか?

2)現在のボタンを識別するために自分clickedとメソッドに何を渡す必要がありますか?setRelatedButtons今、私はボタン自体を持っていますが、もっと良いものはありますか?

3)特定のボタンを関連付けるための最良の方法は何ですか?ボタンのセットごとに配列を使用することもできますが、もっと良い方法があることを願っています。私は潜在的に使用できtypedefますか?(以前にそれらの1つを使用したことはありません)

4

1 に答える 1

1

ボタンの外観を選択したままに設定するには、さまざまな操作を実行できます。ラベル、背景色、テキストの色などを変更できます。これはそれを助けるかもしれません。ご存知のとおり、これをアプリストアに送信する場合、実際の選択状態を使用してボタンが選択されたことを示すことはできません(そうしないでくださいbutton.selected = YES)。Appleはこれを明確に禁止しています。

他のすべてのボタンの選択を解除する場合は、1つのボタンがクリックされたときにすべてのボタンの外観が選択されていないように設定します。それを行った後、メッセージを送信したボタンを選択済みに設定します(上記で決定したものを使用して)。ボタンを配列に配置して、forループを作成してすべてのボタンにアクセスできるようにします(NSMutableArrayで役立ちますaddObject)。

2番目の質問に答えるには、UIButton *それ自体を渡すことで問題ありません(実際には、ポインターを渡すだけです)。[button doSomething]これには、配列やその他のデータ型で検索する代わりに、次のようなことができるという利点があります。

3番目の質問が何を尋ねているのかよくわかりませんが、UIButton必要に応じてサブクラス化できます。ボタンの各セットの配列は、実際には良い考えのように聞こえます。配列の配列を実行することもできます。または、必要なものを返すメソッドを含む配列を含むカスタムホルダークラスを作成することもできます。

addButton配列を使用する場合は、ボタンを配置する配列(または複合配列の一部)をメソッドに指示する整数をメソッドに渡すことができます。

また、質問を1つに留めるようにしてください。複数の質問に答える必要がある場合、人々はあなたの質問に答える可能性がはるかに低くなります。質問はいくつでもできます。別々に質問するだけです。

于 2012-07-13T16:09:59.870 に答える