从字符串创建对UIImageView的引用

时间:2012-04-09 15:31:05

标签: xcode nsstring uiimageview

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

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

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

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

首先这是可能的,如果不是,我应该怎么做?我开始认为在界面构建器中设置这个可能没有帮助吗?

1 个答案:

答案 0 :(得分:0)

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

但是你怎么得到一系列的imageViews?请参阅How to make IBOutlets out of an array of objects?它解释了如何使用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];