在UIViewController的主视图中加载自定义UIView

Bea*_*eav 4 objective-c uiviewcontroller uiview ipad

我已经将UIView子类化并创建了一个NIB来控制我的应用程序的主要逻辑.

希望视图可以很好地扩展,我想将它用于iPhone和iPad版本的应用程序.

在iPhone上,视图将覆盖全屏.在iPad上,视图将仅覆盖屏幕的一部分.

我已经读过你不应该使用UIViewControllers来控制部分屏幕.所以,我试图使用IB将自定义UIView嵌入到主UIViewController的视图中.

如何才能做到这一点?

Bea*_*eav 6

经过大量的反复试验后,我找到了一个基于以下问题中解释的方法的解决方案,由Brian Webster回答.

该解决方案最初建议用于Cocoa环境.我希望它在iOS环境中也有效.

  1. 使用NIB文件创建主视图控制器.在NIB中,文件所有者应该对应于主视图控制器的类.
  2. 使用NIB文件创建自定义视图控制器.在此NIB中,文件所有者应对应于自定义视图控制器的类.
  3. 在主视图控制器类中创建自定义视图控制器属性.
  4. 在主视图控制器类中创建UIView属性.它将保存您的自定义视图控制器的视图.将其定义为IBOutlet,因此可以在NIB中进行链接.
  5. 在主视图控制器的NIB中删除UIView.将其链接到主视图控制器的视图IBOutlet.它将用作自定义视图的占位符.
  6. 在主视图控制器的viewDidLoad方法中,加载自定义视图控制器NIB,确定自定义视图的帧大小并在主视图控制器的视图中复制视图.

这是一些代码:

  • MainViewController.h

    @interface MainViewController : UIViewController {
      CustomViewController *customViewController;
      UIView *customView;
    }
    @property (nonatomic, retain) CustomViewController *customViewController;
    @property (nonatomic, retain) IBOutlet UIView *customView;
    @end

  • MainViewController.m

    - (void)viewDidLoad {
      CustomViewController *controller = [[CustomViewController alloc] initWithNibName:@"CustomViewController" bundle:nil];
      self.customViewController = controller;
      [controller release];
      customViewController.view.frame = customView.frame;
      customViewController.view.autoresizingMask = customView.autoresizingMask;
      [customView removeFromSuperview];
      [self.view addSubview:customViewController.view];
      self.customView = customViewController.view;
      [super viewDidLoad];
    }