如何用iOS5的viewcontroller创建通用视图?

时间:2012-04-13 21:37:59

标签: ios ios5 uiview uiviewcontroller storyboard

我想为iOS5开发并拥有故事板...... 我刚刚在故事板上用UIViewController创建了UIView。 我添加了许多其他UIButtons和标签,并为VC创建了出口。

我想在单个父视图上使用此视图和它的viewcontroller 3次。 这怎么可能?我不想复制“很多其他UIButtons和标签”......

也许我应该在单独的XIB中从故事板创建这个视图?我如何在故事板中使用XIB?

更新

Thanx you,Juzzz - 您的解决方案非常完美:

2 个答案:

答案 0 :(得分:4)

您必须创建2个自定义viewControllers(故事板中每个视图一个)。 例如:

@interface GraphCollectionViewController : UIViewController

@interface GraphViewController : UIViewController

要连接它们,您可以使用以下名称:UIViewController containment

为您的GraphCollectionViewController为您的UIViews创建3个出口。然后创建GraphViewController的3个属性(或数组,你想要的)并在视图中初始化它们。

@property (strong, nonatomic) IBOutlet UIView *topView;
@property (strong, nonatomic) IBOutlet UIView *middleView;
@property (strong, nonatomic) IBOutlet UIView *bottomView;

@property (strong, nonatomic) GraphViewController *topGraphViewController;
@property (strong, nonatomic) GraphViewController *middleGraphViewController;
@property (strong, nonatomic) GraphViewController *bottomGraphViewController;

...

//top graph
    self.topGraphViewController = [storyboard instantiateViewControllerWithIdentifier:@"GraphViewController"]; //init with view from storyboard
    self.topGraphViewController.view.frame = self.topView.bounds; //set frame the same

    [self.view addSubview:self.topGraphViewController.view];
    [self addChildViewController:self.topGraphViewController];
    [self.topGraphViewController didMoveToParentViewController:self];

//middle graph
    self.middleGraphViewController = [storyboard instantiateViewControllerWithIdentifier:@"GraphViewController"]; //init with view from storyboard
    self.middleGraphViewController.view.frame = self.middleView.bounds; //set frame the same

    [self.view addSubview:self.middleGraphViewController.view];
    [self addChildViewController:self.middleGraphViewController];
    [self.middleGraphViewController didMoveToParentViewController:self];

//bottom graph
    self.bottomGraphViewController = [storyboard instantiateViewControllerWithIdentifier:@"GraphViewController"]; //init with view from storyboard
    self.bottomGraphViewController.view.frame = self.bottomView.bounds; //set frame the same

    [self.view addSubview:self.bottomGraphViewController.view];
    [self addChildViewController:self.bottomGraphViewController];
    [self.bottomGraphViewController didMoveToParentViewController:self];

我认为你明白了。为了更加了解this example

答案 1 :(得分:1)

您可以创建一个新的视图类(使用它自己的.h,.m文件),并将其基于您自己创建的ViewController。

代码:

@interface ViewController : UIViewController

假设以上是您要在其他地方使用的原始ViewController。 它有按钮,标签等。

当您创建一个新的视图类时,它将基于您自己而不是UIViewController类,如下所示:

@interface MyNewController : ViewController

现在MyNewController基于你之前创建的ViewController,它应该有你创建的按钮,标签等。

编辑:您可能还需要在故事板中更改视图的基类。 单击要更改的视图,查看右侧属性窗口,在Custom Class下选择您自己的控制器,在本例中为ViewController。