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

标签 objective-c ios cocoa-touch nsstring selector

我是 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描述图像中的情感。然后,不要使用大量变量,例如 faceItemEyesFrightenedfaceItemEyesHappy ,您可以将它们全部放在一个简单的数组中,然后像这样获取其中一个:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.emotion == %ld",
                            MyImageViewEmotionFrightened];
MyImageView *imageView = [eyeImageViews filteredArrayUsingPredicate:predicate][0]

使用 NSDictionary ,您将情感字符串作为键,将 ImageView 作为值。然后你可以很容易地访问它们:
UIImageView *imageView = emotionViewDictionary[@"Frightened"]; 

顺便说一下,Objective-C 中的 bool 值称为 YESNO而不是 truefalse .

关于objective-c - 使用连接的 NSString 执行选择器以查找 UIImageView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13705551/

相关文章:

ios - 通过核心数据查询最大值、最小值和其他

iphone - 调试 AFNetworking 内存使用峰值

objective-c - 如何使用 SwiftPM 在 objective-c 模块中使用 swift 模块?

objective-c - 如何在 UITextview 中同时隐藏键盘并以编程方式选择文本?

ios - 更新 Firebase 上所有子项的值

iphone - iOS : won't terminate or handle many exceptions

objective-c - CFMutableArrayRef 可以存储简单的整数值吗?

同名的 Objective-C 类别

ios - 不在 guard 语句中使用展开

ios - SKReceiptReceiptRequest - 在模拟器上,只有请求 :didFailWithError method is called. 我无法让我的应用程序获取沙箱收据