在单个customView中将一个视图切换到另一个视图

时间:2013-03-27 09:27:18

标签: cocoa xcode4.5 nsview nsviewcontroller

我在一个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]'执行后不允许显示任何视图。

1 个答案:

答案 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]将从视图层次结构中删除您的主机视图(即,从其他视图控制器显示视图的视图),这解释了“不允许显示任何其他子视图部分”。