-1

我希望在代码中而不是在界面构建器中构建尽可能多的新应用程序,因为其中大部分将涉及制作多个重复视图。然而,我希望能够回到我正在制作的许多对象,以便稍后与它们进行交互。

是否需要在我的 .h 文件中创建所有这些对象,然后在我的 .m 中进行设置,或者我可以仅在需要时构建它们吗?如果我只在需要时创建对象,对记忆不是更好吗?

例如,我可以用一种方法制作 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];
}

但是在第二种方法中,我如何能够重新参考这个观点?我还想构建并参考诸如 UITextFields、UILabels、UIButtons 等内容。

谢谢!

4

1 回答 1

1

有多种方法可以实现这一点,这只是我通常使用的其中一种:

注意:此示例使用内部属性来保存对您的视图的引用。HotLickstom在您的评论中提到了这方面的关键教训,您可以使用 ivars 和属性(除其他外):

我的视图控制器.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 再次指出。但是,要做到这一点,您还需要在某处存储对您的集合的引用以获取其内容。因此,使用我的示例,您可能会决定创建一个 or 类型或各种其他类型的属性NSMutableDictionaryNSMutableArray然后添加您希望在其中创建的任何视图。使用 aNSMutableDictionary可能对您更有用,因为您可以使用键将视图存储在其中,然后使用键引用这些视图。

另一种可能性,假设您有一个参考mainView是设置每个视图的标签属性,或一些自定义属性。然后,您可以枚举mainView.subviews以获取您正在寻找的视图,以便对其进行更改。

于 2013-02-26T18:13:12.707 回答