Ich versuche, ein Seitenmenü in Xamarin.iOS mit diesem component und diesem example zu implementieren. Alles funktionierte gut außer dem Teil, wo ich das Side Menu schließen möchte.Sidemenu nicht schließen - Xamarin.iOS
Jetzt funktioniert es so: Ich kann das Seitenmenü entweder mit dem LeftButton von NavigationItem oder dem Finger Swipe öffnen. Aber ich kann es mit keiner dieser beiden Methoden schließen.
Hat jemand eine Idee, warum das passiert? Was vermisse ich?
Siehe auch folgenden Code.
Homeview
public partial class HomeView : MvxViewController
{
public HomeView() : base("HomeView", null)
{
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
// Perform any additional setup after loading the view, typically from a nib.
CGRect screenRect = UIScreen.MainScreen.Bounds;
NavigationController.View.Frame = new CGRect(0, 0, screenRect.Width, screenRect.Height);
var app = UIApplication.SharedApplication.Delegate as AppDelegate;
NavigationItem.SetLeftBarButtonItem(
new UIBarButtonItem(UIImage.FromBundle("menu"),
UIBarButtonItemStyle.Plain, (sender, e) =>
{
app.SidebarController.ToggleMenu();
}), true);
}
RootView
public partial class RootView : MvxViewController
{
public RootViewModel RootViewModel
{
get { return (RootViewModel)ViewModel; }
set { ViewModel = value; }
}
public RootView() : base("RootView", null)
{
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
// Perform any additional setup after loading the view, typically from a nib.
if (ViewModel == null)
return;
var app = UIApplication.SharedApplication.Delegate as AppDelegate;
app.SidebarController = new SidebarController(this,
CreateViewFor(RootViewModel.Home, false), CreateViewFor(RootViewModel.Menu, true));
app.SidebarController.MenuWidth = 220;
app.SidebarController.ReopenOnRotate = false;
app.SidebarController.MenuLocation = MenuLocations.Left;
}
public override void DidReceiveMemoryWarning()
{
base.DidReceiveMemoryWarning();
// Release any cached data, images, etc that aren't in use.
}
private UIViewController CreateViewFor(IMvxViewModel viewModel, bool navBarHidden)
{
var controller = new UINavigationController();
var screen = this.CreateViewControllerFor(viewModel) as UIViewController;
controller.PushViewController(screen, false);
controller.NavigationBarHidden = navBarHidden;
return controller;
}
Ich weiß nicht, was mit Ihrem Code falsch ist. Aber ich benutze Sidebar Navigation in meinem Projekt und es funktioniert sehr gut. Wenn du willst, kann ich meinen Code posten – HeisenBerg
Du verwendest ihn auch mit MVVMCross? –
Während ich dies zu untersuchen fortgesetzt, entdeckte ich, dass die RootViewController oben ist die anderen beiden Controller (Menü und Startseite ViewControler) und sie auf diese beiden alle die Interaktion/Ereignisse nicht zu blockieren. –