执行选择器以使用连接的NSString查找UIImageView

时间:2012-12-04 14:48:41

标签: objective-c ios cocoa-touch nsstring selector

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

所以我正在尝试访问UIImageView,这样我就可以通过将字符串连接在一起来隐藏/取消隐藏它,以获取应该隐藏/取消隐藏的UIImageView的名称。

我通过以下方式开展工作:

self.faceItemEyesFrightened.hidden = false;

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

所以我有以下内容:

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

emotionIs 受惊吓,因此形成

faceItemEyesFrightened

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

self.fullEmotionString.hidden = false;

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

1 个答案:

答案 0 :(得分:0)

您可以像这样使用NSSelectorFromString

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

请注意,这需要定义一个名为faceItemEyesFrightened的getter,如果您正在使用属性并且未更改访问者的名称,则通常就是这种情况。

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

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

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

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

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