2013-02-04 2 views
0

발행합니다. 나는 그 문제에 대해 여러 가지가 있으며, 그들 모두에게 공통적 인 문제라는 희망으로 그들을 나열 할 것이다.MonoMac BeginSheet 내가 MonoMac 응용 프로그램을 쓰고 있어요 그리고 내가 BeginSheet과 사투를 벌인거야

BeginSheet를 통해 로그인 창을 시트로 표시 할 수 있지만 MainMenu 대신 응용 프로그램의 속성에서 MainWindow에 내 응용 프로그램의 기본 인터페이스를 설정하면 BeginSheet는 아무 작업도 수행하지 않습니다. 시트가 닫힌 후에도 내 대리인이 실행되지 않습니다. Close()를 호출하여 LoginDialogController 내에서 LoginWindow를 닫습니다.

내가 내 MainWindowController에 사용하는 코드입니다 :

나는 전혀 효과가없는 다음 코드를 사용 내 다른보기 중 하나에서
public override void WindowDidLoad() 
{ 
    base.WindowDidLoad(); 

    Dialogs.LoginDialogController loginDialog = new Dialogs.LoginDialogController(); 
    loginDialog.Window.IsVisible = false; 

    NSApplication.SharedApplication.BeginSheet(loginDialog.Window, Window, delegate { 
     // THIS NEVER RUNS 
     mainTabView.SelectAt(1); 
     mainToolbar.SelectedItemIdentifier = "hometoolbaritem"; 
    }); 
} 

:

TypeDialogController typeDialog = new TypeDialogController(); 
typeDialog.Window.IsVisible = false; 
// THIS CALL HAS NO EFFECT 
NSApplication.SharedApplication.BeginSheet(typeDialog.Window, View.Window, delegate { 
    // THIS WILL PROBABLY NOT RUN EITHER, EVEN IF THE SHEET SHOWS 
}); 

상관 도움이 될 것를 고맙습니다.

당신은 MainWindow를에 응용 프로그램의 주요 인터페이스를 전환 할 때 방법은 MainWindowController의 일부이기 때문에 WindowDidLoad() 메소드가 호출되지 않습니다

답변

0

, MainWindow를하지.

가 가 가 MainMenu.xib이 앱의 기본 UI로 시작
  • MainMenu.xib은 AppDelegate에의 인스턴스를
  • AppDelegate에 FinishedLaunching (NSObject의 통지) 대리자 메서드는
      :

      는 이벤트

      정상 순서는 다음과 같이이다

    1. FinishedLaunching (NSObject 알림)은 MainWindowController의 새 인스턴스를 구성하고이를 사용하여 MainWindow를 표시합니다.
    2. MainWindowControll 어 WindowDidLoad은()라고하며, 코드는 MainWindow.xib에로

    메인 인터페이스를 변경

  • 을 실행이 MainWindow.xib에이 앱의 기본 UI로 시작

    1. 일어나는 것입니다. 즉 MainWindow의 인스턴스가 생성되지만 컨트롤러를 관리 할 수는 없습니다. 응용 프로그램 대리인이 없습니다.

    주 인터페이스를 MainWindow.xib로 변경하면 어떤 결과를 얻으려고하는지 명확하지 않습니다. 아마도 당신이 누군가 당신을 도우려고 시도 할 수 있다고 생각한다면 어떨까요?

    시트에 발생한 문제에 대해서는 LoginDialogController에서 시트를 제대로 닫지 않은 것으로 보입니다. Window.Close()를 호출하는 것만으로는 충분하지 않으므로 추가 시트가 보이지 않게됩니다. 다음과 같이해야합니다.

    NSApplication.SharedApplication.EndSheet(this.Window); 
    this.Window.OrderOut(sender); 
    this.Window.Close(); 
    

    BeginSheet에 대한 호출과 EndSheet 호출의 균형을 항상 조정해야합니다.

    이 문제가 아닌 경우 LoginDialogController에서 시트를 닫는 방법을 보여줘야합니다.

    관련 문제