我正在寻找一种方法来重用一个.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编程中是不可能的?
答案 0 :(得分: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];
注意:您必须使用 secondXib 作为 UIView
答案 1 :(得分:1)
如果您有主菜单xib
,并且您尝试加载view
中定义的特定xib
。我们将其命名为containerView
。将containerView
与init
中的主{。}文件ActionBarView
与viewDidLoad
相关联。使用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;
ActionBarView
是UIView
答案 2 :(得分:0)
您正在通过以下方式创建控制器:
ActionBarViewController *actionbarViewController = [[ActionBarViewController alloc] init];
如果要通过xib初始化控制器,这是不正确的。正确的方法是:
ActionBarViewController *actionbarViewController = [[ActionBarViewController alloc] initWithNibName:@"ActionBarViewController" bundle:nil];