2013-08-23 2 views
0

Я использую код наложения здесь - http://docs.xamarin.com/recipes/ios/standard_controls/popovers/display_a_loading_messageMonotouch.Dialog Загрузка Overlay не показывая

Он работал все хорошо ..., я был в состоянии назвать View.Add(loadingOverlay)

... пока я не изменил вещи MonoTouch.Dialog, и он больше не работает.

public partial class BaseView : UIViewController 
{ 
    LoadingOverlay loadingOverlay; 

    public void ProgressDialogShow(string message, string title) 
    { 
     loadingOverlay = new LoadingOverlay(message, UIScreen.MainScreen.Bounds); 
     View.Add(loadingOverlay); 
    } 
} 

И сам вид просмотра (LoginView) наследуется от BaseView.

[Register("SecondLoginView")] 
public class SecondLoginView : BaseView 
{ 
    public override void ViewDidLoad() 
    { 
     base.ViewDidLoad(); 
     window = new UIWindow(UIScreen.MainScreen.Bounds); 

     root = new RootElement("Login") { 
      new Section() { 
      new EntryElement ("Benutzer", "Login", "Test") 
      } 
     }; 
     rootVC = new DialogViewController(root); 
     nav = new UINavigationController(rootVC); 
     window.RootViewController = nav; 
     window.MakeKeyAndVisible(); 
    } 
} 

В этом случае Loadingoverlay не отображается. Как я могу использовать его с MonoTouch.Dialog?

Любая помощь оценена!

ответ

1

Slack Shot находится на правильном пути. Причина, по которой возникают проблемы, связана с тем, что вы структурируете свое приложение странно. У вас не должно быть заданий window.MakeKeyAndVisible или window.RootViewController в вашем классе SecondLoginView.

Вы можете добавить свой rootVC как подвид, как это:

V iew.Add(rootVC.View);

Я уверен, что вы можете сделать это каким-то образом с кодом у вас есть, но, как я всегда использую DialogViewController (если его единственный вид, который должен был отображаться на экране), я наследую непосредственно от него. Если вы хотите предоставить некоторый общий код наложения, сделайте свой BaseView DialogViewController и наследуйте его.

Something like: 

public partial class BaseDialogController : DialogViewController 
{ 
    LoadingOverlay loadingOverlay; 

    public void ProgressDialogShow(string message, string title) 
    { 
     loadingOverlay = new LoadingOverlay(message, UIScreen.MainScreen.Bounds); 
     View.Add(loadingOverlay); 
    } 
} 

Вы должны удалить этот код из контроллера представления:

nav = new UINavigationController(rootVC); 
    window.RootViewController = nav; 
    window.MakeKeyAndVisible(); 

Если вы хотите, чтобы ваш контроллер в nav, делать это везде, где вы создаете SecondViewController. В вашем случае это может быть в файле раскадровки.

+0

Спасибо для дополнительного слова магии. :) –

1

В вашем втором классе «secondloginview» кажется, что вы пытаетесь делать то, что обычно делается в файле делегата приложения.

В этом коде:

Что вы делаете, что делают навигационный контроллер в контроллер представления корневого для приложения, а затем установить окно входа в единственный контроллер представления, прикрепленный к этому контроллеру Nav.

Я думаю, что вы хотите сделать, это удалить этот код контроллера навигации и использовать this.PresentviewController (RootVC, true);

Чтобы отобразить контроллер диалогового окна для входа.

+0

Я не совсем уверен, как вы это понимаете. Я удалил код контроллера навигации и использовал ваше предложение, но все тот же. Дело в том, что, когда я не называю 'window.MakeKeyAndVisible();', он показывает тонкости загрузки, но есть черный фон. Но после вызова 'window.MakeKeyAndVisible();' его не показано, или его показано за «View» .. Я не знаю, как разместить LoadOverlay после 'window.MakeKeyAndVisible();' call .. – eMi

Смежные вопросы