当前位置:  开发笔记 > Android > 正文

如何在Interface Builder中获取视图以在另一个笔尖中加载自定义视图?

如何解决《如何在InterfaceBuilder中获取视图以在另一个笔尖中加载自定义视图?》经验,为你挑选了1个好方法。

我正在制作一个我想在多个笔尖中使用的自定义小部件.所以我创建一个新的视图nib Screen3,添加一些按钮,现在想要我的UIAwesomeSauce小部件.

如果我只是添加一个视图然后更改类标识,它就不会从UIAwesomeSauce笔尖获取子元素.如果我去图书馆并切换到Classes,也是一样的.似乎只有UIViewController具有"从笔尖加载"字段,这将是美丽的.

我知道我可以从代码中加载UIAwesomeSauce笔尖,获取顶级对象,然后手动放置它.但IB的观点是,您不必将代码置于代码中.如果我能让UIAwesomeSauce显示在图书馆列表中,那就更好了.

解决 - 由尼姆罗德 - 阅读解释和代码

无论如何,dood,那太好了.我现在可以制作自己的小部件类,用于愚蠢的真棒.让您的UI的FileOwner成为您的类,并在其中只有一个普通的UIView与您的所有东西.(小部件的nib中的单个视图不能是类本身,或者你在initWithCoder中得到递归.)然后在你要使用它的nib中,创建一个vanilla UIView并更改它的类.你将无法真正看到该广场内的小部件,而是处理.

Self现在是一个空白视图,而tMyActualSelf是您在另一个nib中完成工作的单个视图.好极了!

- (id)initWithCoder:(NSCoder*)coder 
{
    if ((self = [super initWithCoder:coder])) 
    {
        UIView *tMyActualSelf = nil;
        // Initialization code
        NSArray *tNibItems = [[NSBundle mainBundle] loadNibNamed:@"UIAwesomeSauce" owner:self options:nil];
        for (id object in tNibItems) 
        {
            if ([object isKindOfClass:[UIView class]])
                tMyActualSelf = (UIView *)[object retain];
        }   
        if( tMyActualSelf ) 
        {
            tMyActualSelf.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
            [self addSubview:tMyActualSelf];
        }
    }
    return self;
}

Nimrod.. 14

我觉得你的痛苦当UIViewController是唯一可以指定nib加载的东西,但我认为这是因为必须有一个文件所有者,它是一个控制器,或类似的东西,虽然我不知道为什么UIView不能是文件的所有者.

我认为你可以把东西放在自定义对象下的库中,但我认为你只能将UIView放在那里,只需将类设置为UIView的自定义子类.其实,我看着想扩展接口生成器,它看起来像你可以为OS X的东西做的,而不是iPhone的东西.它涉及在界面构建器中编译新窗口小部件的代码,以告诉它如何在IB中绘制窗口小部件.我认为实际上有一个OS X模板.

我想我可能要做的是在包含所有子视图的nib文件中创建一个主视图,然后在initWithCoder中:在UIAwesomeSauce中打开nib文件,加载主视图,然后将它放在self中以便你在UIAwesomeSauce视图和子视图(或子视图,视情况而定)之间有一个"不必要的"视图.我不确定它是多么低效,但在搞乱一些东西看起来像UIWebView之类的一些视图似乎有其中一个看似不必要的中间观点(IIRC).

如果你想出一个更好的解决方案,请告诉我,因为我也想知道.

编辑

现在,我看它,我想了UIView可以是文件的所有者,你不能把它架在IB.基本上你在UIView子类中调用nib加载这样的东西:

[bundle loadNibNamed:@"UISpecialSauce"所有者:自选:...]

我认为,如果你创建UISpecialSauce或任何网点那么他们应该被分配正确,因为业主的:自我.



1> Nimrod..:

我觉得你的痛苦当UIViewController是唯一可以指定nib加载的东西,但我认为这是因为必须有一个文件所有者,它是一个控制器,或类似的东西,虽然我不知道为什么UIView不能是文件的所有者.

我认为你可以把东西放在自定义对象下的库中,但我认为你只能将UIView放在那里,只需将类设置为UIView的自定义子类.其实,我看着想扩展接口生成器,它看起来像你可以为OS X的东西做的,而不是iPhone的东西.它涉及在界面构建器中编译新窗口小部件的代码,以告诉它如何在IB中绘制窗口小部件.我认为实际上有一个OS X模板.

我想我可能要做的是在包含所有子视图的nib文件中创建一个主视图,然后在initWithCoder中:在UIAwesomeSauce中打开nib文件,加载主视图,然后将它放在self中以便你在UIAwesomeSauce视图和子视图(或子视图,视情况而定)之间有一个"不必要的"视图.我不确定它是多么低效,但在搞乱一些东西看起来像UIWebView之类的一些视图似乎有其中一个看似不必要的中间观点(IIRC).

如果你想出一个更好的解决方案,请告诉我,因为我也想知道.

编辑

现在,我看它,我想了UIView可以是文件的所有者,你不能把它架在IB.基本上你在UIView子类中调用nib加载这样的东西:

[bundle loadNibNamed:@"UISpecialSauce"所有者:自选:...]

我认为,如果你创建UISpecialSauce或任何网点那么他们应该被分配正确,因为业主的:自我.

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有