iOS,如何将.xib加载到另一个.xib中?

时间:2014-01-23 09:01:31

标签: ios iphone objective-c xib addsubview

我正在寻找一种方法来重用一个.xib文件中的内容并将其加载到多个其他.xib文件中。原因是我可以将我的部分设计重用于我的应用中的所有页面。我知道在android编程中,你可以通过在你的设计.xml文件中编写include nameOfFile来做到这一点。

我尝试了以下内容:

创建了一个链接到.h和.m文件的.xib文件,它们都被称为ActionBarViewController .xib / .h / .m。

之后我在我的ActionBarViewController.m文件中设置了backgroundcolor。

self.view.backgroundColor = [UIImage gbBlue]; 

我的.h for ActionBarViewController看起来像这样:

@interface ActionBarViewController : UIViewController {

}
@property (retain, nonatomic) IBOutlet UIView *actionBarView;

@end

然后我在我的mainMenu.m中包含了我的ActionBarViewController(这就是.m文件到.xib我想加载我的ActionBar视图)。

现在在我的mainMenu.m的viewDidLoad中,我试着像这样加载它。

ActionBarViewController *actionbarViewController = [[ActionBarViewController alloc] init];

[self.view addSubview:actionbarViewController.actionBarView];
[actionbarViewController release];

我也试过了:

ActionBarViewController *obj=[[[NSBundle mainBundle] loadNibNamed:@"ActionBarViewController" owner:self options:nil]objectAtIndex:0];

obj.actionBarView.frame=CGRectMake(70, 160, 180, 80);

[self.view addSubview:obj.actionBarView];
[obj release];

但它不起作用,所以我错过了什么?或者这在iOS编程中是不可能的?

3 个答案:

答案 0 :(得分:1)

  1. 很简单,你必须只创建第二个xib的对象并添加到main中 查看,如下所示:

    SecondXib obj=[[[NSBundle mainBundle] loadNibNamed:@"SecondXib" owner:self
    options:nil]objectAtIndex:0];
    
    obj.frame=CGRectMake(70, 160, 180, 80);
    
    [self.view addsubview:obj];
    
  2. 注意:您必须使用 secondXib 作为 UIView

答案 1 :(得分:1)

如果您有主菜单xib,并且您尝试加载view中定义的特定xib。我们将其命名为containerView。将containerViewinit中的主{。}文件ActionBarViewviewDidLoad相关联。使用ActionBarView中的一些类方法加载nib文件并返回结果。然后将其添加为subview中的containerView

//viewDidLoad
    ActionBarView *actionBar = [ActionBarView getInstance];
    [containerView addSubview:actionBar]

//Class method getInstance in ActionBarViewController
    ActionBarView *actionBar = [[[NSBundle mainBundle] 
                                          loadNibNamed:@"ActionBarViewController" 
                                          owner:nil options:nil] lastObject];
    if ([actionBar isKindOfClass:[ActionBarView class]])
        return actionBar;
    else
        return nil;

ActionBarViewUIView

答案 2 :(得分:0)

您正在通过以下方式创建控制器:

ActionBarViewController *actionbarViewController = [[ActionBarViewController alloc] init];

如果要通过xib初始化控制器,这是不正确的。正确的方法是:

ActionBarViewController *actionbarViewController = [[ActionBarViewController alloc] initWithNibName:@"ActionBarViewController" bundle:nil];