也许我正在考虑这个错误,所以请指出我正确的方向..
我想将许多UIViews作为属性,以便我可以使用不同的方法更新它们。像这样:
@property UIView *view1
@property UIView *view2
...
@property UIView *view200
-(void)updateViews{
for (i=0; i <200; i++){
//Update view here
}
所以我的问题是:
如此多的精彩回复,我想我需要添加更多信息。
尝试将我的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。也有人可以帮助我吗?
答案 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中使用标签
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];
}
这就是你能看到的东西
要调用所有这些视图,您可以使用
for (UIView *yourView in self.view.subviews) {
[yourView removeFromSuperview];
}
这就是你会看到的
如果您想调用自己的视图,可以使用此类标记
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];
}
}