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これは通常、プロパティを使用していて、アクセサーの名前を変更していない場合に当てはまります。

そうは言っても、これはあなたの問題に対する最適な解決策ではないと思います。たとえば、画像の感情を説明する をサブクラス化UIImageViewして追加できます。次に、またはenum MyImageViewEmotionのように多くの変数を使用する代わりに、それらすべてを単純な配列に入れてから、次のようにそのうちの 1 つを取得できます。faceItemEyesFrightenedfaceItemEyesHappy

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

NSDictionary感情文字列をキーとして、画像ビューを値として配置する を使用します。次に、それらに非常に簡単にアクセスできます。

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

ちなみに、Objective-C のブール値はand ではなく and とYES呼ばれます。NOtruefalse

于 2012-12-04T14:54:08.907 に答える