0

我在一个 xib 中有一个 CustomView,在两个不同的 xib 中有两个不同的视图。我想在一个CustomeView中一个接一个地显示这两个视图。我有一个 NSView 对象,它连接到 .xib 文件中的 CustomView

@property (retain) IBOutlet NSView *mySubview;
@property (retain) NSViewController *viewController;

打开一个View的方法是:

 -(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]'

4

1 回答 1

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

于 2013-03-27T09:53:57.947 回答