2013-03-27 4 views
0

У меня есть один CustomView в одном xib и двух разных представлениях в двух разных xib. Я хочу отобразить эти два представления один за другим в одном CustomeView. У меня есть объект NSView, который подключен к CustomView в .xib файлеПереключение одного вида на другой вид в отдельных customViews

@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

Вы должны удалить только представление, которое вы добавили с помощью контроллера вида. Вместо этого попробуйте использовать следующий код.

-(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] удалит ваш взгляд хозяина (то есть, тот, который отображает взгляды других контроллеров зрения) С точкой зрения иерархии, и это объясняет «не позволяет отображать любую другие подвиды часть».