我是 Objective-C 的新手,如果这是一个新手问题,我很抱歉。
我已经搜索了几个小时,似乎无法找到我的问题的答案。
所以我试图访问一个 UIImageView 以便我可以通过将字符串连接在一起来隐藏/取消隐藏它以获得应该隐藏/取消隐藏的 UIImageView 的名称。
我通过以下方式工作:
self.faceItemEyesFrightened.hidden = false;
然而 受惊 每次单击按钮时,名称的一部分可能会有所不同,因此,尝试重构我的代码时,我运行了一个返回 UIImageView 类型的函数,应该会受到影响。
所以我有以下内容:
NSString *fullEmotionString = [@"faceItemEyes" stringByAppendingString:emotionIs];
在哪里 情感是将是 受惊 ,因此形成
faceItemEyesFrightened
所以当我想做这样的事情时,我的问题就来了:
self.fullEmotionString.hidden = false;
显然这不是正确的方法,但我不确定应该如何做,任何建议都非常感谢。
干杯!
最佳答案
您可以使用 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
,您将情感字符串作为键,将 ImageView 作为值。然后你可以很容易地访问它们:UIImageView *imageView = emotionViewDictionary[@"Frightened"];
顺便说一下,Objective-C 中的 bool 值称为
YES
和 NO
而不是 true
和 false
.
关于objective-c - 使用连接的 NSString 执行选择器以查找 UIImageView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13705551/