0

我有一系列在 IB 中创建的 UIImageViews。我想根据某些按钮的按下来显示和隐藏这些。我目前有一个方法,如果按下 1,则隐藏 2、3、4,然后如果按下 2,则隐藏 1、3、4。这可行,但我正在尝试改进我的代码以进行更新。

我的背景是动作脚本,所以我不确定我想做的是否正确。

我基本上想评估对 UIImageView 的字符串引用,在 AS 中我会使用 eval(string)。

我使用的方法是从一个字符串和一个数字创建一个字符串,所以我得到“image1”。一切正常,但我需要将其评估为 UIImageView 以便我可以更新 alpha 值。

首先这是可能的,如果不是,我应该怎么做?我开始认为在界面生成器中进行此设置可能没有帮助?

4

1 回答 1

0

这可能不是一个好的工作方式。你想要的是一个 imageViews 数组。然后你只需要一个数字索引,你可以通过 imageViews 数组隐藏所有没有选择索引的东西。

但是你如何得到一个 imageViews 数组呢?请参阅如何从对象数组中制作 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 回答