-1

インターフェイスビルダーではなくコードで新しいアプリをできるだけ多く構築しようと考えています。その多くは、いくつかの繰り返しビューを作成する必要があるためです。ただし、作成中のオブジェクトの多くに戻って、後で操作できるようにしたいと考えています。

これらのオブジェクトはすべて .h ファイルで作成してから .m でセットアップする必要がありますか? それとも、必要な場合にのみビルドできますか? 必要なときにだけオブジェクトを作成するほうが、記憶によいのではないでしょうか?

たとえば、次のような 1 つのメソッドで UIView を作成できます。

-(void)makeViewOne {
UIView *viewOne = [[UIView alloc] init];
viewOne.frame = CGRectMake(0,0,50,50);
viewOne.backgroundColor = [UIColor whiteColor];
[mainView addSubview:viewOne];
}

-(void)changeViewOneBackgroundColor {
viewOne.backgroundColor = [UIColor grayColor];
}

しかし、2 つ目の方法として、このビューを参照するにはどうすればよいでしょうか? また、UITextFields、UILabels、UIButtons などを作成して参照したいと思います。

ありがとう!

4

1 に答える 1

1

これを実現するにはさまざまな方法がありますが、ここでは私が通常使用する方法の 1 つにすぎません。

注: この例では、内部プロパティを使用してビューへの参照を保持しています。これに関する重要な教訓は、あなたのコメントでHotLickstomによって言及されていました。

MyViewController.m

@interface MyViewController()
@property (nonatomic, retain) UIView *viewOne;
@end

@implementation MyViewController
@synthesize viewOne;
...
...
-(void)makeViewOne 
{
    self.viewOne = [[[UIView alloc] init] autorelease];
    self.viewOne.frame = CGRectMake(0,0,50,50);
    self.viewOne.backgroundColor = [UIColor whiteColor];
    [mainView addSubview:self.viewOne];
}
-(void)changeViewOneBackgroundColor 
{
    self.viewOne.backgroundColor = [UIColor grayColor];
}
/*
 Bonus!
*/
-(void)removeViewOne 
{
    [self.viewOne removeFromSuperview];
}
...
...
@end

編集

明確にするために、ポイントはビューへの参照をどこかに保存することです。コメントでは、複数のオブジェクトがある場合もあれば、状況によってはそうでない場合もあると述べています。これは何も変更しません。ただし、代わりにビューをコレクションに格納することを検討することもできます。これも HotLicks によって指摘されています。ただし、そのためには、コレクションの内容を取得するために、コレクションへの参照もどこかに保存する必要があります。NSMutableDictionaryしたがって、私の例を使用すると、代わりにor型、または他のさまざまな型のプロパティNSMutableArrayを作成し、それらに作成したいビューを追加することができます。キーを使用してビューを保存し、キーを使用してそれらのビューを参照できるため、を使用するNSMutableDictionaryとより便利な場合があります。

への参照があると仮定すると、別の可能性はmainView、各ビューのタグ プロパティまたはカスタム プロパティを設定することです。次に、列挙mainView.subviewsして、探しているビューを取得し、変更を加えることができます。

于 2013-02-26T18:13:12.707 に答える