我是Objective-C的新手,很抱歉,如果这是一个新手问题。 我搜索了几个小时,似乎无法找到我的问题的答案。
所以我正在尝试访问UIImageView,这样我就可以通过将字符串连接在一起来隐藏/取消隐藏它,以获取应该隐藏/取消隐藏的UIImageView的名称。
我通过以下方式开展工作:
self.faceItemEyesFrightened.hidden = false;
然而,每次单击一个按钮时,名称的 Frightened 部分可能会有所不同,所以尝试重构我的代码我运行一个返回UIImageView类型的函数应该受到影响。
所以我有以下内容:
NSString *fullEmotionString = [@"faceItemEyes" stringByAppendingString:emotionIs];
emotionIs 受惊吓,因此形成
faceItemEyesFrightened
所以当我想做这样的事情时,我的问题出现了:
self.fullEmotionString.hidden = false;
显然,这不是正确的做法,但我不确定应该怎么做,任何建议都非常感激。 干杯!
答案 0 :(得分:0)
您可以像这样使用NSSelectorFromString
:
SEL selector = NSSelectorFromString(fullEmotionString);
UIImageView *imageView = [self performSelector:selector];
imageView.hidden = NO;
请注意,这需要定义一个名为faceItemEyesFrightened
的getter,如果您正在使用属性并且未更改访问者的名称,则通常就是这种情况。
话虽如此,我认为这不是解决问题的最佳方案。
例如,您可以创建子类UIImageView
并添加描述图像中情感的enum MyImageViewEmotion
。然后,您可以将所有变量放在一个简单的数组中,然后像下面这样获取其中一个变量,而不是使用大量变量,例如faceItemEyesFrightened
或faceItemEyesHappy
。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.emotion == %ld",
MyImageViewEmotionFrightened];
MyImageView *imageView = [eyeImageViews filteredArrayUsingPredicate:predicate][0]
使用NSDictionary
,您可以将情感字符串作为键,将图像视图作为值。然后你可以很容易地访问它们:
UIImageView *imageView = emotionViewDictionary[@"Frightened"];
顺便说一下,Objective-C中的布尔值被称为YES
和NO
,而不是true
和false
。