2

UILabel、UITextView などのオブジェクト名を取得する必要があります。例:

@property (nonatomic, strong) IBOutlet UITextField *Adress;

...

for (UIView *theObject in [self.view subviews]){
   NSString *objName = //theObject name 
   NSLog(@"name of subview is: %@", objName);
   // should be "name of subview is: Adress  "
}

誰にもアイデアはありますか?

4

4 に答える 4

2

実行時にポインターに付けた名前を取得することはできません。ただし、オブジェクトのクラスを取得することに興味がある場合は、それがより実行可能です..

for (UIView *view in self.view.subviews) {
    NSString *className = NSStringFromClass([view class]);
    NSLog(@"the name of the class of the current object is: %@",className);
}

このようにオブジェクトを参照できるようにしたい場合は、代わりに UIView のtagプロパティを使用してビューを追跡することをお勧めします。または、これを文字列で行うことに固執する場合は、いつでも要素をサブクラス化し、それらに NSStringnameプロパティを与えることができます。これを行うと、オブジェクトに割り当てたポインターの名前の文字列値と同等になるように、これらの値をハード コードすることができます。

于 2013-11-07T12:20:23.463 に答える
1

このタスクはあまり明確ではありません。

まず、1 つのオブジェクトが複数のプロパティから参照される可能性があることを理解する必要があります。

ところで、ビュー ツリーとすべての ViewController のリストをスキャンして、このオブジェクトを参照するすべてのプロパティを検索することができます。

ツリー スキャンは、再帰関数を介して実装できます。すべてのUIViewを見つける方法は?

ViewController リスト スキャンは、 How to get all View Controller? を介して実装できます。

プロパティ スキャンは、次のトピックで説明するリフレクションを介して実装できます。

おそらく、オブジェクトへのすべての参照をスキャンして、それらのプロパティをスキャンすることができます。ただし、そのタスクのクイックガイドはわかりません。

于 2013-11-07T12:31:58.157 に答える