0

1つのxibに1つのCustomViewがあり、2つの異なるxibに2つの異なるビューがあります。これらの2つのビューを1つのCustomeViewに次々に表示したいと思います。.xibファイルでCustomViewに接続されているNSViewのオブジェクトがあります

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

1つのビューを開く方法は次のとおりです。

 -(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で正しく表示されますが、2番目のビューまたは同じビューをもう一度開こうとすると、前に開いたビューと重なってしまいます。

私は試した

[_mySubview removeFromSuperview]

'mySubview'を完全に削除します。つまり、現在ロードされているビューはすべて削除されますが'[_mySubview removeFromSuperview]'、実行後にビューを表示することはできません。

4

1 に答える 1

1

追加したビューのみをViewControllerから削除する必要があります。代わりに次のコードを試してください。

-(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 に答える