如何将UIViewController的视图添加为子视图

请注意谷歌,这个QA现在已经过了六年

正如下面的Micky和其他人所提到的,现在这些工作已经在iOS平台上与Containers一起完成了。


我有一个控制许多子视图的ViewController。 当我点击其中一个按钮时,我初始化另一个视图控制器并将它的视图显示为此视图的子视图。 然而,子视图超出子视图框架的边界,并且infact填充整个屏幕。

什么可能是错的? 我认为问题是,UIViewController的视图有一个框架(0,0,320,460),因此填充整个屏幕(尽管它只在触摸子视图范围内接收触摸事件)。 我如何调整框架以适合子视图。

总之,我需要帮助将viewcontroller的视图作为子视图添加到另一个viewcontroller的视图。

谢谢!


从iOS 5开始,Apple现在允许您创建自定义容器,以便将UIViewController添加到另一个UIViewController,特别是通过addChildViewController等方法,因此可以嵌套UIViewControllers

编辑:包括就地总结,以避免链接断裂

我引用:

iOS提供了许多标准容器来帮助您组织应用程序。 但是,有时您需要创建与任何系统容器不匹配的自定义工作流。 也许在你看来 ,你的应用需要一个特定的子视图控制器组织,它们之间有特殊的导航手势或动画转换。 要做到这一点,你需要实现一个自定义容器 - 告诉我更多...

...和:

当你设计一个容器时,你可以在容器,父级和其他视图控制器,它的子级之间创建显式的父子关系 - 告诉我更多

示例(Apple文档提供)将另一个视图控制器的视图添加到容器的视图层次结构中

- (void) displayContentController: (UIViewController*) content
{
   [self addChildViewController:content];                 
   content.view.frame = [self frameForContentController]; 
   [self.view addSubview:self.currentClientView];
   [content didMoveToParentViewController:self];          
}

干杯,

米奇邓肯


感谢这些人,我做到了http://highoncoding.com/Articles/848_Creating_iPad_Dashboard_Using_UIViewController_Containment.aspx

添加UIView,将其连接到标题:

@property (weak, nonatomic) IBOutlet UIView *addViewToAddPlot;

在 - (void)viewDidLoad中做到这一点:

ViewControllerToAdd *nonSystemsController = [[ViewControllerToAdd alloc] initWithNibName:@"ViewControllerToAdd" bundle:nil];
    nonSystemsController.view.frame = self.addViewToAddPlot.bounds;
    [self.addViewToAddPlot addSubview:nonSystemsController.view];
    [self addChildViewController:nonSystemsController];
    [nonSystemsController didMoveToParentViewController:self];

请享用


这个答案对于旧版本的iOS是正确的,但现在已经过时。 你应该使用Micky Duncan的答案,它涵盖了自定义容器。

不要这样做! UIViewController的目的是驱动整个屏幕。 它只是不适合这个,它并没有真正添加任何你需要的东西。

所有你需要的是一个拥有你自定义视图的对象。 只需使用UIView本身的一个子类,它就可以添加到窗口层次结构中,并且内存管理是完全自动的。

将子视图NIB的所有者指向UIView的自定义子类。 将contentView添加到此自定义子类中,并将其指向nib中的视图。 在自定义子类中执行如下操作:

- (id)initWithFrame: (CGRect)inFrame;
{
    if ( (self = [super initWithFrame: inFrame]) ) {
        [[NSBundle mainBundle] loadNibNamed: @"NibNameHere"
                                      owner: self
                                    options: nil];
        contentView.size = inFrame.size;
        // do extra loading here
        [self addSubview: contentView];
    }
    return self;
}

- (void)dealloc;
{
    self.contentView = nil;
    // additional release here
    [super dealloc];
}

(我假设你在使用initWithFrame:构造子视图。)

链接地址: http://www.djcxy.com/p/87677.html

上一篇: How to add an UIViewController's view as subview

下一篇: function with getElementById not working