3

我有一个几乎完成的 iOS 5 项目,但是到处都缺少一个相同的视图。它是标准 NavigationBar 的替代品,您可以通过滑动在导航层次结构中“返回”,并且动画效果很好。

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

- (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 是空的!(UIView *view 也不起作用,owner:self.headerView 也不起作用)

…日志只是给了我:

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

…</p>

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

我不明白,为什么 xib 在我的情况下完全一文不值?!

4

2 回答 2

0

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

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

[self.headerView = [bundle objectAtIndex:0]

这应该可以解决问题

于 2012-05-04T18:23:27.120 回答
0

解决了!!!

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

然后在每个故事板 ViewController 的 viewDidLoad-method 中加载洞的东西:

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

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

  1. 另一种可能性是: 使用没有外部 xib 的情节提要添加子视图
  2. 或: http: //forums.macrumors.com/showthread.php?t=749544

看起来 Xib 没有相应的 ViewController 是没用的,但应该(奇怪..无论如何)。但是感谢您的回复,如果他/她有同样的问题,希望现在有人能找到这个!

于 2012-05-22T10:11:14.627 回答