Iphone ViewController中的通用视图-代码可重用性

Iphone ViewController中的通用视图-代码可重用性,iphone,ios,Iphone,Ios,我的大多数视图控制器中几乎没有常见视图。我注意到,我可以为所有视图控制器重用单个代码,这是绝对明智的。为此,我决定创建一个类Utils,它有如下静态方法 +(void)createCommonViews:(float)yAxis:(NSString*)text; 在我的例子中,常见的视图是三个标签和两个图像 问题:我无法从Utils添加这些视图。我想知道如何将self作为参数发送,以便添加来自Utils的视图。在viewController之外添加视图可能是错误的。在这种情况下,解决方案是

我的大多数视图控制器中几乎没有常见视图。我注意到,我可以为所有视图控制器重用单个代码,这是绝对明智的。为此,我决定创建一个类Utils,它有如下静态方法

+(void)createCommonViews:(float)yAxis:(NSString*)text;  
在我的例子中,常见的视图是三个标签和两个图像

问题:我无法从Utils添加这些视图。我想知道如何将self作为参数发送,以便添加来自Utils的视图。在viewController之外添加视图可能是错误的。在这种情况下,解决方案是什么?在
UIView
中获取所有这些视图,将Utils方法的返回类型设置为
UIView
,然后将
UIView
添加到viewController(从viewController调用方法后)可能会解决我的问题。但我要寻找的是另一种解决方案

+(void) createCommonViews:(float)yAxis withText:(NSString*) text toTarget:(UIViewController*) target
{
//create views
    [target addSuview:view];
}

但我认为返回Uiview,然后将其添加到UIViewController中是一个更好的解决方案

您尝试的方法是将视图对象作为单例。这在最好的情况下是不常见的,在最坏的情况下是等待发生的崩溃。更好的设计是让每个视图控制器类都有自己的自定义视图实例,如下所示:

@interface MyCommonView : UIView

// ...

@end



@interface MyViewController_A : UIViewController {
   MyCommonView *commonView;
}

@property (strong, nonatomic) IBOutlet MyCommonView *commonView;

@end



// Meanwhile somewhere else...



@interface MyViewController_B : UIViewController {
   MyCommonView *commonView;
}

@property (strong, nonatomic) IBOutlet MyCommonView *commonView;

@end

创建一个viewController,作为所有常用内容的父视图,将其称为CommonViewController,然后在希望其出现的所有viewController中实现此功能

-(void) viewDidLoad 
{
   [self.view addSubView:[[CommonViewController alloc] initWithRect:..];
}
或者使用xib文件