1

我已经UIView在一个UIViewController类中声明了一个。我可以UIView在另一个UIViewController班级打电话吗?

如果可能的话,我该怎么称呼它?

4

2 回答 2

1

是的,您可以在多个视图/视图控制器中使用视图的单个实例。通常我对带有广告的视图做同样的事情。

您可以像处理任何其他对象一样传递它们。如果您不在 Interface Bulder 中创建它(我建议以编程方式创建它),那么您可能希望在应用程序委托中定义它而不是视图控制器,并将其传递给使用它的各个视图控制器。

在视图控制器中,只需将其添加为相应的子视图,就像您对任何其他视图一样。

不过有一件事。当您第二次或更多次将此视图添加到另一个超级视图时,它将从之前的超级视图中删除。这意味着当它之前的超级视图再次可见时,您将不得不再次将其添加为超级视图。一个视图一次只能是一个视图层次结构的一部分。


示例代码,感谢 Gordon:

/* Untested and simplified */
AppDelegate.h:
@property ( strong, nonatomic) ReuseableView reuseableView

;

AppDelegate.m

@synthesize reuseableView; 

/* in didFinishLaunchingWithOptions ...*/ 
reuseableView = [[alloc] init]; // or init from nib, initwithframe, etc. 

视图控制器.m

/* In each view controller that uses the view */
 - (void) viewWillAppear:(BOOL)animated 
{ 
  [self.view addSubview:((AppDelegate*)[UIApplication sharedApplication].delegate).reuseableView]; 
}

 - (void) viewWillDisappear:(BOOL)animated 
{ 
  [((AppDelegate*)[UIApplication sharedApplication].delegate).ReuseableView removeFromSuperview]; 

}


我不太确定这removeFromSuperview是否真的需要。addSubview无论如何,下一个都会将其从现有的超级视图中删除,如果addSubview连续两次在同一个超级视图上调用,那么它不会造成任何伤害。但是,此时可以保存使用removeFromSuperview

嗯,总结一下,基本就这些了。您在一个公共位置定义、创建和存储您的共享视图(Gordon 示例中的可重用视图)。应用程序委托是一个很好的地方。在每个使用共享视图的视图控制器中,您从委托中获取它并将其作为子视图添加到当前视图。

于 2012-07-13T08:56:08.490 回答
0

我会将 UIView 子类化并将其导入我想使用它的 ViewControllers

    NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"YourView" owner:self options:nil];
    yourView = (YourView *)[nibArray objectAtIndex:0];

然后你设置它的框架和[self.view addSubview:yourView]

于 2012-07-13T08:59:54.523 回答