Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 在Interface Builder中嵌套XIB/通过引用嵌入_Xcode_Interface Builder_Xib - Fatal编程技术网

Xcode 在Interface Builder中嵌套XIB/通过引用嵌入

Xcode 在Interface Builder中嵌套XIB/通过引用嵌入,xcode,interface-builder,xib,Xcode,Interface Builder,Xib,假设我已经为图标视图创建了一个XIB。然后,我希望通过引用将此图标视图的多个实例嵌入到不同的XIB容器视图,因此如果我更改原始图标视图XIB中的属性/布局,容器视图XIB中的实例将反映这些更改 本质上,通过引用嵌入 也许我有点紧张,但界面生成器在将视图拖动到容器视图时的默认行为似乎是复制所有内容,而不是引用原始的XIB?将与图标视图关联的类的实例拖动到容器视图中只会导致一个空白视图 我肯定有办法做到这一点,但如果我能弄明白的话,我就完蛋了。我通常会像躲避瘟疫一样躲避IB;) 在Interface

假设我已经为图标视图创建了一个XIB。然后,我希望通过引用将此图标视图的多个实例嵌入到不同的XIB容器视图,因此如果我更改原始图标视图XIB中的属性/布局,容器视图XIB中的实例将反映这些更改

本质上,通过引用嵌入

也许我有点紧张,但界面生成器在将视图拖动到容器视图时的默认行为似乎是复制所有内容,而不是引用原始的XIB?将与图标视图关联的类的实例拖动到容器视图中只会导致一个空白视图


我肯定有办法做到这一点,但如果我能弄明白的话,我就完蛋了。我通常会像躲避瘟疫一样躲避IB;)

在Interface Builder中没有直接执行此操作的方法。我需要在上一个应用程序中执行类似的操作。我最后做的只是将一个占位符视图放置在您想要引用的xib的位置,然后在您的viewDidLoad或VIEWWILLEASE中,等等,加载该xib并将加载的视图作为占位符视图的子视图放置

NSArray *views = [[NSBundle mainBundle] loadNibNamed: @"ReferencedView" owner: self options: nil];
UIView *referencedView = (UIView *)[views objectAtIndex:0];
[self.viewPlaceholder addSubview:referencedView];
或者,您可以在视图控制器中创建一个IBOutlet来保存引用的视图,并在IB中连接该插座。如果这样做,则无需将视图从NSArray中拉出

我就是这样做的:

注意,现在在iOs 5中,他们已经有了containerView。据我所知,它没有出现在XIB中。但本质是一样的

创建一个视图,并将其称为ContainerView。如果使用XIB样式,则需要手动设置一些内容,如子视图控制器的alloc]init,将其添加到父视图,并将视图添加到父视图

如果您在故事板中这样做,您可以从该ContainerView链接到其他控制器并创建嵌入segue。但是,它只适用于一个视图控制器,您需要对其余视图控制器使用相同的方法

然后我会这样做:

- (void)viewDidLoad
{

    [super viewDidLoad];

    PO(self.childViewControllers);
    BGCRListBusinessViewController * theListController= [[BGCRListBusinessViewController alloc]init];
    self.listBusinessViewController = theListController;
    [self addChildViewController:theListController];
...
    for (UIViewController * child in self.childViewControllers) {
        child.view.frame=self.ContainerView.bounds;

    }
    //PO(self.ChangeFilter.BackgroundImage);
    //PO
    //self.ChangeFilter setBackgroundImage:[UIImage imageNamed:@] forState:<#(UIControlState)#>

    [self.ContainerView addSubview:self.listBusinessViewController.view];// initialize'
}
-(void)viewDidLoad
{
[超级视图下载];
PO(自选儿童视图控制器);
BGCRListBusinessViewController*ListController=[[BGCRListBusinessViewController alloc]init];
self.listBusinessViewController=列表控制器;
[自添加儿童视图控制器:列表控制器];
...
用于(UIViewController*self.childViewController中的子对象){
child.view.frame=self.ContainerView.bounds;
}
//PO(self.ChangeFilter.BackgroundImage);
//PO
//self.ChangeFilter setBackgroundImage:[UIImage ImageName:@]用于状态:
[self.ContainerView addSubview:self.listBusinessViewController.view];//初始化'
}
多田

现在看看ChildViewController集合。这在IOS5中是新的。它所做的一切,就是传递VIEW将出现、VIEW将消失、VIEWDIDTHIS和VIEWIAM旋转或其他任何内容。它的作用远不止这些,但我不在乎

因此,如果您的目标是IOS4,您可以直接调用父视图中的所有对象,分别显示、显示、显示和显示

在我的实现中,我有一个指向在ContainerView中具有视图的viewController的指针。此类视图将获得所有调用的ViewWillOrdWhatver函数

我的父母也有几个孩子。大部分都看不见。没问题。看不见的孩子永远看不见

这是由ChildViewController自动完成的。如果您的目标是IOS4,请查看所有子视图控制器的视图,并查看是否显示其中任何一个。如果显示,则调用他们的视图willordwhatever

还有一些额外的委托,用于通知是否将子项添加到父项或其他内容。我没有用它,也不知道它是用来干什么的

最后,有些观点可能会被驳回。父母应该这样做。我通过通知来实现这一点。但这已经超出了问题的范围。IOS已经为modalViewController提供了这样的功能