iOS SDK使用loadNibNamed,'init'内的代码无法按预期工作

时间:2013-09-11 05:03:26

标签: ios objective-c cocoa-touch uiview loadnibnamed

FluidInfo *fluidInfo = [[FluidInfo alloc]init];
UIView *info = [[[NSBundle mainBundle] loadNibNamed:@"FluidInfoSheet" owner:fluidInfo options:nil] objectAtIndex:0];

[self createFormulaPopup:info];

我有一个UIView的nib文件。我有一个名为“UIView”的FluidInfo子类。我使用我的函数“UiView”将viewController显示为createFormulaPopup内的弹出窗口

我已将UIView作为FluidInfo的子类。当我创建出口和行动时,它们都正常工作。

问题是我的init中的UIView功能意外运行。如果我记录的东西然后它与我的弹出窗口同时出现..但如果我设置类似于视图的背景颜色,它似乎消失了。如果我在界面构建器中设置它会坚持。如果我将颜色的变化附加到UIView内的动作,那么这也会起作用。但是当视图初始化时,它似乎撤消了我以编程方式完成的所有内容。

2 个答案:

答案 0 :(得分:0)

好的,所以我解决了这个问题。我在uiview本身而不是在我的viewcontroller中加载了nib

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];

    if (self) {
        self = [[[NSBundle mainBundle] loadNibNamed:@"FluidInfoSheet" owner:self options:nil]objectAtIndex:0];

        // Initialization code
    }
    return self;
}

答案 1 :(得分:0)

在您的代码中,您传递了视图控制器

的FluidInfo * fluidInfo
 [[[NSBundle mainBundle] loadNibNamed:@"FluidInfoSheet" owner:fluidInfo options:nil]objectAtIndex:0];

参考此链接 https://developer.apple.com/library/ios/documentation/uikit/reference/NSBundle_UIKitAdditions/Introduction/Introduction.html

因为你必须传递所有者作为你的文件所有者,你将所有者作为视图子类传递,这就是为什么它可能无法通过self(你的视图控制器)所以它会在应用程序中找到文件所有者。

  [[[NSBundle mainBundle] loadNibNamed:@"FluidInfoSheet" owner:self options:nil]objectAtIndex:0];

参考Stack over flow的这个链接,为您提供文件所有者What describes the "File's Owner" best in objective-c / cocoa Nib?

的非常好的描述