我正在制作一个自定义的小部件,我想在多个笔尖中使用。因此,我制作了一个新的视图笔尖屏幕3,添加一些按钮,现在想要我的uiawesomesauce小部件。

如果我只是添加视图然后更改类标识,则不会从uiawesomesauce nib中获得子元素。如果我去图书馆并切换到课程,同样的事情。似乎只有一个UiviewController拥有“ NIB负载”的字段,这将是美丽的。

我知道我可以从代码中加载Uiawesomesauce Nib,获取顶层对象并手工放置。但是IB的目的是,您不必将其放入代码中。更好的是,如果我可以让uiawesomesauce出现在库列表中。

解决 - 尼姆罗德 - 继续阅读以获取说明和代码

无论如何,杜德,这很棒。我现在可以做自己的小部件课程,作为愚蠢的很棒的东西。使您的UI NIB的文件世界成为您的课程,其中只有一个正常的Uiview和您的所有内容。 (小部件的笔尖中的单个视图不能是类本身,也不能是initwithCoder中的递归。)然后,在您要使用的笔尖中,制作一个香草uiview并更改其类。您将无法实际看到该广场内部的小部件,而是交易。

现在,自我是空白的视图,tmyactualSelf是您在另一个笔尖中完成工作的单一视图。耶!

- (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;
}
有帮助吗?

解决方案

当涉及到UiviewController时,我感到您的痛苦是您唯一可以指定笔尖负载的东西,但我认为这是因为必须有一个文件的所有者是控制器或类似的东西,尽管我不确定为什么为什么uiview不能是文件的所有者。

我认为您可以将物品放在自定义对象下,但我认为您只能将Uiview放入其中,而该类仅设置为Uiview的自定义子类。我实际上是在尝试扩展接口构建器,看起来您可以为OS X物品做,但对于iPhone的东西而不是。它涉及编制接口构建器中新小部件的代码,以告诉它如何仅在IB中绘制小部件。我认为实际上有一个OS X模板。

我认为我可能要做的是在包含所有子视图的笔尖文件中创建一个主视图,然后在initwithcoder中:在uiawesomesauce中打开笔尖文件,加载主视图,然后将其放置在自我内部,以便您将其放置在自我中,以便您将其放置在自我内部,以便您将其放置。在uiawesomesauce视图和子视图(或情况下为子视图)之间具有“不必要的”视图。这些看似不确定的中间视图之一(IIRC)。

如果您提出更好的解决方案,请告诉我,因为我也想知道。

编辑

现在我看了一下,我认为uiview可以是文件的所有者,您只是无法在IB中进行设置。基本上,您会在Uiview子类中调用类似的笔尖加载:

捆绑loadnibamed:@“ uispecialsauce”所有者:自我选择:...

我认为,如果您在uispecialsauce或其他任何东西中创建插座,那么由于所有者:自我,应正确分配它们。

其他提示

有一个可以实际帮助的可可菌:https://github.com/mobilejazz/nibwrapper

它提供了一个包装器视图,该视图从另一个笔尖加载了孩子视图。您可以通过运行时属性在接口构建器中指定该笔尖的名称。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top