我在一个xib中有一个CustomView,在两个不同的xib中有两个不同的视图。 我想在一个CustomeView中一个接一个地显示这两个视图。 我有一个NSView的对象,它连接到.xib文件中的CustomView
@property (retain) IBOutlet NSView *mySubview; @property (retain) NSViewController *viewController;
打开一个视图的方法是:
-(IBAction)selectBookTicket:(id)sender
{
//setting status label to nil
_viewController=[[NSViewController alloc] initWithNibName:@"BookTicket" bundle:nil];
//loading bookTicket xib in custom view of NormalUserWindow
[_mySubview addSubview:[_viewController view]];
}
在同一个CustomView中打开另一个视图的方法是:
-(IBAction)selectTicketCancellation:(id)sender
{
_viewController=[[NSViewController alloc] initWithNibName:@"CancelTicket" bundle:nil];
//loading CancelTicket xib in custom view of NormalUserWindow
[_mySubview addSubview:[_viewController view]];
}
当我第一次打开任何视图时,它在CustomView中正确显示,但当我尝试第二次打开第二个视图或相同视图时,它会在之前打开的视图上重叠。
我试过
[_ mySubview removeFromSuperview]
它正在完全删除'mySubview',我的意思是当前加载的视图是什么,它被删除但是在'[_mySubview removeFromSuperview]'
执行后不允许显示任何视图。
答案 0 :(得分:1)
您必须仅删除已从视图控制器添加的视图。请尝试使用以下代码。
-(IBAction)selectTicketCancellation:(id)sender
{
[[_viewController view] removeFromSuperView];
_viewController=[[NSViewController alloc] initWithNibName:@"CancelTicket" bundle:nil];
//loading CancelTicket xib in custom view of NormalUserWindow
[_mySubview addSubview:[_viewController view]];
}
执行[_mySubview removeFromSuperview]
将从视图层次结构中删除您的主机视图(即,从其他视图控制器显示视图的视图),这解释了“不允许显示任何其他子视图部分”。