2013-08-23 137 views
0

我使用的覆蓋碼從這裏Monotouch.Dialog加載覆蓋 - http://docs.xamarin.com/recipes/ios/standard_controls/popovers/display_a_loading_message沒有顯示

它的工作都很好...我能叫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在正確的軌道上。你遇到問題的原因是因爲你奇怪地構造你的應用程序。您的SecondLoginView課程中不應該有window.MakeKeyAndVisiblewindow.RootViewController作業。

您可以添加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」中,您似乎正在嘗試執行通常在應用程序委託文件中完成的操作。

在該代碼:

你在做什麼是使導航控制器到該應用的根視圖控制器,然後設置登錄窗口連接到導航控制器的唯一視圖控制器。

我想你想做什麼,是刪除導航控制器代碼並使用this.PresentviewController(RootVC,true);

顯示用於登錄的對話視圖控制器。

+0

我不完全確定你的意思。我刪除了導航控制器代碼,並使用了您的提案,但仍然相同。事情是,當我不調用'window.MakeKeyAndVisible();',它顯示de loadingoverlay罰款,但有比黑色背景。但是在調用'window.MakeKeyAndVisible();'它沒有顯示,或者顯示在「View」後面之後..我不知道如何在'window.MakeKeyAndVisible();'調用之後放置LoadingOverlay .. – eMi