iOS - 跨故事板使用的NIB视图(用于设计和动画逻辑)

时间:2012-05-04 14:13:02

标签: objective-c ios interface-builder storyboard xib

我的iOS 5项目差不多已经完成,但是到处都有一个View丢失了。它是标准NavigationBar的替代品,您可以通过滑动在导航层次结构中“返回”,并且可以很好地制作动画。

好的,因为很难通过代码进行布局我创建了空IB文档(HeaderView.xib),其中我有一个包含子视图等的视图。 之前我有动画代码所以我刚刚创建了一个UIView子类(“HRAnimationView”)(并在xib的检查器“Custom Class”字段中写了它的名字,并将子视图连接到出口),方法是:

- (void)loadAnimation {…}

和第二个(这是完成动画的委托方法):

- (void)animationDidStop:(NSString*)animationID finished:(NSNumber*)finished context:(void*)context {}

...这就是所有动画内容发生的地方,一遍又一遍地自我调用直到它完成......

在故事板中,我有一个具有完全相同尺寸(以及它的出口)的子视图,并希望加载XIB(在相应控制器的viewDidLoad方法中):

NSArray *bundle = [[NSBundle mainBundle] loadNibNamed:@"HeaderView" owner:self options:nil];

HRAnimationView *view;

for (id object in bundle) {        
    NSLog(@"%@",object);
    if ([object isKindOfClass:[UIView class]])
        view = (HRAnimationView *)object;
}

self.headerView = view;
[self.view setNeedsDisplay];
[view loadAnimation];

但是headerView是EMTPY !! (也是UIView *视图没有用,也没有所有者:self.headerView)

......日志只是给了我:

<HRAnimationView: 0x3f1890; frame = (0 0; 240 49); autoresize = RM+BM; layer = <CALayer: 0x3f18d0>>

...

问题是什么?也没有编译失败!

我不明白,为什么xib在我的情况下完全没用?!

2 个答案:

答案 0 :(得分:0)

  

NSArray * bundle = [[NSBundle mainBundle] loadNibNamed:@“HeaderView”owner:self options:nil];

在上述声明之后......尝试添加此

[self.headerView = [bundle objectAtIndex:0]

这应该可以解决问题

答案 1 :(得分:0)

解决!!!

我创建了一个新的ViewController并检查了“使用xib创建”框并删除了xib的视图并复制并粘贴了已设置的视图,在ViewController中我将动画代码放在viewDidLoad中。

然后在每个故事板ViewController的viewDidLoad方法中加载了一个孔:

UIViewController *ctrl = [[UIViewController alloc] initwithNibNamed:@"HeaderView"];
[self.headerView addSubview:ctrl.view]

(headerView是每个故事板中视图的IBOutlet所以,这基本上是唯一要设置的东西,NICE!)

  1. 另一种可能性是: Add subview using storyboard without external xib
  2. 或:http://forums.macrumors.com/showthread.php?t=749544
  3. 看起来没有相应的ViewController,Xib没用,但应该(奇怪......等等)。 但是感谢您的回复,希望有人现在可以找到这个,如果他/她有同样的问题!