将视图存储在数组中

时间:2014-06-03 16:57:09

标签: ios uiview nsmutablearray

我有三个按钮和一个视图控制器。我想将三个按钮链接到这三个按钮  不同的观点(页面)。

我通过制作三个视图并将其存储在一个可变数组中来尝试这个。

ViewArray=  [[NSMutableArray alloc]initWithCapacity:15];


 CGRect  viewRect = CGRectMake(10, 10, 100, 10);   
 //VIEW1
UIView* view1 = [[UIView alloc] initWithFrame:viewRect];
view1.backgroundColor = [UIColor redColor];


//VIEW2
UIView* view2 = [[UIView alloc] initWithFrame:viewRect];
view2.backgroundColor = [UIColor greenColor];

我以编程方式添加了三个按钮。之后,我使用了每个按钮的动作:

//action for each button    
self.view = [ViewArray objectAtIndex:i];//where i={1,2,3} for different functions

但我没有得到我想要的东西。

2 个答案:

答案 0 :(得分:0)

更好的设计是无形地添加所有视图,然后将其不透明度改为0.0-1.1以隐藏和显示。 (另外,OP中的一个关键错误是代码用子视图替换视图控制器视图,而不是添加它们)

CGRect  viewRect = CGRectMake(10, 10, 100, 10);   
//VIEW1
UIView* view1 = [[UIView alloc] initWithFrame:viewRect];
view1.backgroundColor = [UIColor redColor];
view1.tag = 1;
view1.alpha = 0.0;
[self.view addSubview:view1];

//VIEW2
UIView* view2 = [[UIView alloc] initWithFrame:viewRect];
view2.backgroundColor = [UIColor greenColor];
view1.tag = 2;
view1.alpha = 0.0;
[self.view addSubview:view2];

在vc的界面中添加一个跟踪可见视图的属性:

@property(nonatomic, weak) UIView *visibleSubview;

然后按钮动作:

UIView *subview = [self.view viewWithTag:i];
//where i={1,2,3} for different functions
// i really needs to be 1,2,3 here, to correspond to the tags

[UIView animateWithDuration:0.5 animations:^{
    subview.alpha = 1.0;
    self.visibleSubview.alpha = 0.0;
} completion:^(BOOL finished) {
    self.visibleSubview = subview;
}];

答案 1 :(得分:0)

嗯,我不确定你想要什么。但一般情况下,如果你想访问任何更改多个对象,如UIView或UILabels等...你可以使用和NSArray和一个for循环来访问和进行所有更改,而不需要任何额外的代码副本,如下所示:

首先,使用所有对象设置NSArray,如下所示:

NSArray *_viewArray = @[view1, view2]; //etc....

还设置了一个包含不同UIColors的数组,如下所示:

NSArray *_colourArray = @[[UIColor redColor], [UIColor greenColor]]; //etc....

然后当你想访问它们并编辑多个UIViews或者任何对象时,你可以像这样使用for循环:

for (int loop = 0; loop < ([_viewArray count] - 1); loop++) {
    ((UIView*)_viewArray[loop]).backgroundColor = ((UIColor*)_colourArray[loop]);
}

我希望这可以帮助你:)