0

IBで作成された一連のUIImageViewがあります。ボタンを押す回数に応じて、これらを表示および非表示にします。私は現在、1が押された場合は2,3,4を非表示にし、2が押された場合は1,3,4を非表示にするというメソッドを持っています。これは機能しますが、更新のためにコードを改善しようとしています。

私のバックグラウンドはactionscriptなので、私がやろうとしていることが正しいかどうかはわかりません。

基本的に、UIImageViewへの文字列参照を評価したいのですが、ASではeval(string)を使用します。

私が使用している方法は、文字列と数値から文字列を作成することなので、「image1」を取得します。すべて動作しますが、アルファ値を更新できるように、これをUIImageViewに評価する必要があります。

まず、これは可能ですか?そうでない場合は、どのようにこれを行う必要がありますか?私はこれをInterfaceBuilderで設定しても役に立たないと思い始めていますか?

4

1 に答える 1

0

それはおそらく良い働き方ではありません。必要なのは、imageViews の配列です。次に、数値インデックスが必要なだけで、選択したインデックスを持たないものをすべて非表示にして、imageViews の配列を調べることができます。

しかし、imageView の配列を取得するにはどうすればよいでしょうか。オブジェクトの配列から IBOutlets を作成する方法を参照してください。 IBOutletCollection の使い方を説明します。

ビューごとに個別のボタンがある場合は、それらも IBOutletCollection に入れます。そうすれば、次のようなものを持つことができます:

- (IBAction) imageButtonPressed:(id) sender;
{
    // The sender is the button that was just pressed.
    NSUInteger chosenIndex = [[self imageButtons] objectAtIndex:sender];
    for (NSUInteger imageIndex = 0; imageIndex < [[self imageViews] count]; imageIndex++)
    {
        // Hide all views other than the one associated with the pressed button.
        if (imageIndex != chosenIndex)
        {
            [[[self imageViews] objectAtIndex:imageIndex] setHidden:YES];
        }
        else
        {
            [[[self imageViews] objectAtIndex:imageIndex] setHidden:NO];
        }
    }
}

文字列image1を実際に imageViewに関連付ける必要がある場合はNSDictionary、後で検索できるように、コントロールを一意の文字列識別子に関連付ける を作成できます。NSDictionary は強力ですが、これが必要な理由については空白を描いています。

NSMutableDictionary *viewLookup;
[viewLookup setObject:[[self imageViews] objectAtIndex:0] forKey:@"image0"];
[viewLookup setObject:[[self imageViews] objectAtIndex:1] forKey:@"image1"];
[viewLookup setObject:[[self imageViews] objectAtIndex:2] forKey:@"image2"];

[viewLookup setObject:[[self imageButtons] objectAtIndex:0] forKey:@"button0"];
// ...
// Can now look up views by name.
// ...
NSString *viewName = @"image1";
UIView *viewFound = [viewLookup objectForKey:viewName];
[viewFound doSomething];
于 2012-04-11T13:53:14.657 に答える