我有一系列在IB中创建的UIImageViews。我想显示和隐藏这些取决于按下按钮。我目前有一种方法,如果按1则隐藏2,3,4然后如果按2则隐藏1,3,4。这有效但我正在尝试改进我的代码以进行更新。
我的背景是动作脚本所以我不确定我想做的事情是否正确。
我基本上想要评估对UIImageView的字符串引用,在AS中我会使用eval(string)。
我使用的方法是从字符串和数字创建一个字符串,所以我得到“image1”。一切正常,但我需要将其评估为UIImageView,以便我可以更新alpha值。
首先这是可能的,如果不是,我应该怎么做?我开始认为在界面构建器中设置这个可能没有帮助吗?
答案 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];