Objective C - 如何创建一组要更新的子视图

时间:2015-08-05 10:37:56

标签: objective-c uiview properties

也许我正在考虑这个错误,所以请指出我正确的方向..

我想将许多UIViews作为属性,以便我可以使用不同的方法更新它们。像这样:

@property UIView *view1

@property UIView *view2
...

@property UIView *view200

-(void)updateViews{

for (i=0; i <200; i++){

//Update view here

}

所以我的问题是:

  1. 如何轻松制作多个观点?
  2. 如何轻松地将消息传递到每个单独的视图?
  3. 如此多的精彩回复,我想我需要添加更多信息。

    尝试将我的UIViews放入一个数组来索引它们,但我很难访问它们来更新它们在UIViewController中的位置。我认为将它们作为属性是正确的方法,因为我需要使用设备标题更新它们。看起来使用标签可能是最好的。有人可以进一步评论这种方法:

    for (i = 0 ; i < 144; i++) {
    UIView *sunView =[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"sun.png"]];
        sunView.tag = i;
    }
    
    //then later, in a separate method do the following:
    
    for (i = 0 ; i < 144; i++) {
    CGFloat CGx = self.acceleration.X;
    CGFloat CGy = self.acceleration.Y
    [sunView.tag.i setFrame:CGRectMake(CGx, CGy, 20, 20)]
    }
    

    我不确定如何使用相应的索引标记访问UView。也有人可以帮助我吗?

4 个答案:

答案 0 :(得分:1)

在循环中创建视图并将它们存储在NSMutableArray中。这样您就可以在视图控制器中访问所有这些内容。

创建一个属性。

@property (monatomic) NSMutableArray *arrayOfViews;


self.arrayOfViews = [[NSMutableArray alloc] init];
UIView *view;
for (int i = 0; i < 10; i++)
{
    view = [[UIView alloc] init];
    [self.arrayOfViews addObject:view];
}

在此阵列上运行循环并逐个访问视图并调用您需要调用的方法。

旁注:为什么要创建200个UIViews?这很多:)

答案 1 :(得分:1)

当它们真的是子视图时,您可以遍历superview的子视图数组。

如果您有多个层次结构级别,则可以通过recursievely将其应用于子视图的所有子视图。

如果您不想将此应用于每个超级视图的子视图,请使用view.tag = 6502之类的标记对子视图进行标记,并使用该标识来标识要应用它的视图。

或者维护自己的数组或设置(可迭代的集合)视图并迭代它们。

答案 2 :(得分:0)

  

如何轻松制作多个观点?

您想在IB中创建吗?

1)您可以在Xcode中使用标签

enter image description here

UILabel * label =(UILabel *)[self.view viewWithTag:19];

UIView * view =(UIView *)[self.view viewWithTag:20];

2)您可以使用您同时执行的属性

  

如何轻松地将消息传递到每个单独的视图?   如果您在另一个视图(currentView)中的视图可以使用

for (UIView *yourView in self.currentView.subviews) {
    //Update view here
}

或者如果您想在代码

中创建它
for (int i = 0; i < 10; i++)
{
      UIView * myView = [[UIView alloc]initWithFrame:CGRectMake(10*i, 10*i, 25, 25)];
      int r = arc4random() % 255;
      int g = arc4random() % 255;
      int b = arc4random() % 255;
      myView.backgroundColor = [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1];
     [self.view addSubview: myView];
}

这就是你能看到的东西

enter image description here

要调用所有这些视图,您可以使用

 for (UIView *yourView in self.view.subviews) {
    [yourView removeFromSuperview];
}

这就是你会看到的

enter image description here

如果您想调用自己的视图,可以使用此类标记

 for (int i = 0; i < 10; i++)
     {
         UIView * myView = [[UIView alloc]initWithFrame:CGRectMake(10*i, 10*i, 25, 25)];
         myView.tag = i + 21;
         int r = arc4random() % 255;
         int g = arc4random() % 255;
         int b = arc4random() % 255;
         myView.backgroundColor = [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1];
         [self.view addSubview: myView];
     }

     for (UIView *yourView in self.view.subviews) {
         if (yourView.tag == 21) {
             [yourView removeFromSuperview];
         }
     }

答案 3 :(得分:0)

我认为你需要这样的东西:

-(void)updateViews
{
    UIView *views;
    UILabel *label;
    for(int i = 0 ; i < numberOfViews ; i++)
    {
        views = [[UIView alloc] initWithFrame:CGRectMake(...)];
        label = [[UILabel alloc] initWithFrame:CGRectMake(0,0,views.frame.size.width,views.frame.size.height)];
        [label setText:[NSString stringWithFormat:@"%d",i]];
        [views addSubview:label];
        [self.view addSubview:views];
    }
}