2

我是 Objective-C 的新手,如果这是一个新手问题,我很抱歉。我已经搜索了几个小时,似乎无法找到我的问题的答案。

所以我试图访问一个 UIImageView 以便我可以通过将字符串连接在一起来隐藏/取消隐藏它以获得应该隐藏/取消隐藏的 UIImageView 的名称。

我通过以下方式工作:

self.faceItemEyesFrightened.hidden = false;

但是,每次单击按钮时,名称的受惊部分可能会有所不同,因此,尝试重构我的代码时,我运行了一个返回 UIImageView 类型的函数,应该会受到影响。

所以我有以下内容:

NSString *fullEmotionString = [@"faceItemEyes" stringByAppendingString:emotionIs];

情绪会在哪里受到惊吓,因此形成

faceItemEyesFrightened

所以当我想做这样的事情时,我的问题就来了:

self.fullEmotionString.hidden = false;

显然这不是正确的做法,但我不确定应该如何做,任何建议都非常感谢。干杯!

4

1 回答 1

0

你可以这样使用NSSelectorFromString

SEL selector = NSSelectorFromString(fullEmotionString);
UIImageView *imageView = [self performSelector:selector];
imageView.hidden = NO;

请注意,这需要faceItemEyesFrightened定义一个调用的 getter,如果您使用属性并且没有更改访问器的名称,通常就是这种情况。

话虽如此,我认为这不是您问题的最佳解决方案。例如,您可以子类化UIImageView并添加一个enum MyImageViewEmotion描述图像中情感的内容。然后,您可以将所有变量放在一个简单的数组中,然后像这样获取其中一个,而不是使用大量变量,例如faceItemEyesFrightenedor :faceItemEyesHappy

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.emotion == %ld",
                            MyImageViewEmotionFrightened];
MyImageView *imageView = [eyeImageViews filteredArrayUsingPredicate:predicate][0]

使用 an NSDictionary,您将情感字符串作为键,将图像视图作为值。然后你可以很容易地访问它们:

UIImageView *imageView = emotionViewDictionary[@"Frightened"]; 

顺便说一下,Objective-C 中的布尔值被称为YESandNO而不是trueand false

于 2012-12-04T14:54:08.907 回答