我正在使用此处的重叠代码 - 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);
}
}
View本身(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中使用它?
任何帮助表示赞赏!
答案 0 :(得分:1)
在你的第二课“secondloginview”中,你似乎正在尝试做一些通常在app delegate文件中完成的事情。
在那段代码中:
您正在做的是将导航控制器放入应用程序的根视图控制器中,然后将登录窗口设置为连接到该Nav控制器的唯一视图控制器。
我认为你想要做的是删除导航控制器代码并使用this.PresentviewController(RootVC,true);
显示用于登录的对话框视图控制器。
答案 1 :(得分: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的任何位置执行此操作。在您的情况下,它可能在故事板文件中。