我希望在代码中而不是在界面构建器中构建我的新应用程序,因为它将涉及制作多个重复的视图。我希望能够回到我正在制作的许多物品,以便以后与它们互动。
是否需要在我的.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等内容。
谢谢!
答案 0 :(得分:1)
有各种方法可以实现这一点,这里只是我通常使用的其中一种方法:
注意:此示例使用内部属性来保存对视图的引用。在您的评论中, HotLicks 和 tom 提到了这方面的关键教训,您可以使用ivars和属性(以及其他内容):
的 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
或NSMutableArray
的属性,或其他各种类型的属性,然后添加您希望在其中创建的任何视图。使用NSMutableDictionary
可能对您更有用,因为您可以使用密钥将视图存储在其中,然后使用密钥返回这些视图。
假设您引用mainView
,另一种可能性是设置每个视图的标记属性或某些自定义属性。然后,您可以枚举mainView.subviews
以获取您要查找的视图,以便对其进行更改。