将XIB加载到子视图中

时间:2012-09-29 18:46:53

标签: iphone objective-c ios xcode

我一直在寻找关于如何做到这一点的信息,但没有找到我理解的任何内容。

基本上我希望能够(从ViewController.xib)在子视图中的该视图上加载另一个XIB文件。这个新的子视图应该是可操作的,因此它可以通过多点触控手势和/或滑动手势来移动。

我试图从ViewController添加一个“view”对象,然后将另一个XIB加载到该子视图对象中。

希望有人可以提供帮助。谢谢!

3 个答案:

答案 0 :(得分:5)

您应该能够通过在ViewController中创建另一个类的实例,然后将其作为子视图添加到当前视图控制器来完成您想要的任务。

MyOtherViewController *movc = [[MyOtherViewController alloc] init];
[self.view addSubview:movc.view];

至于处理手势,您可以在MyOtherViewController类中处理它们,也可以制作容器视图并在ViewController中处理它们。不要忘记它们是子视图,任何动作都应该与他们的超级视图相关。

答案 1 :(得分:1)

上面的代码几乎是正确的,但

除外
UIView *newView = [[NSBundle mainBundle] loadNibNamed:@"MyNewXib" owner:self options:nil];

应该是

UIView *newView = [[[NSBundle mainBundle] loadNibNamed:@"MyNewXib" owner:self options:nil] objectAtIndex:0];

在视图控制器中,您只需添加

即可
[self.view addSubview:newView];

答案 2 :(得分:0)

您可以通过创建xib(选择File New ...“用户界面”,“view”)在xib中定义子视图。

您可以像这样加载该视图:

UIView *newView = [[NSBundle mainBundle] loadNibNamed:@"MyNewXib" owner:self options:nil];

现在可以将新视图视为任何其他子视图:

// assign it to a property
@property (strong, non atomic) UIView *viewFromXib;
@sythesize viewFromXib=_viewFromXib;

self.viewFromXib = newView;

// add it to your hierarchy
self.viewFromXib.frame = CGRectMake( /* this will start out 0,0 the size from the xib */ );
[self.view addSubview:self.viewFromXib];

// add gesture recognizer
UITapGestureRecognizer *tapGR =  [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];
[self.viewFromXib addGestureRecognizer:tapGR];

......等等