iOS Question Disable AutoRotate if the controller is the SideMenuController

Filippo

Expert
Licensed User
Hi,

How can you disable AutoRotate if the controller is the SideMenuController?

Since I changed the NavigationController and use a SideMenuController, the Sub Main_ShouldAutoRotate is no longer executed.
How can I fix the problem?

B4X:
Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'Public variables can be accessed from all modules.
    Public App As Application
    Public NavControl As NavigationController
    Private Page1 As Page
    Private Page2 As Page
   
    Private smc As SideMenuController
    Private pMenu As Page
End Sub

Private Sub Application_Start (Nav As NavigationController)
    NavControl.Initialize("NavControl")
    NavControl.NavigationBarVisible = False
   
    Page1.Initialize("Page1")
    Page1.RootPanel.LoadLayout("frmMainIphone")
    NavControl.ShowPage(Page1)
    Page2.Initialize("Page2")
    Page2.RootPanel.Color = Colors.Red
       
    pMenu.Initialize("lp")
    pMenu.RootPanel.LoadLayout("frmMenu")

    smc.Initialize(pMenu, NavControl, Null)
    App.KeyController = smc
End Sub

Sub Page1_Click
    NavControl.ShowPage(Page2)
End Sub

Sub Main_ShouldAutoRotate As Boolean
    If Page2.Visible = True Then
        Return False 'Don't auto rotate if Page2 is visible
    Else
        Return True
    End If
End Sub


#if OBJC
@end
@interface UINavigationController (B4IResize)

@end
@implementation UINavigationController (B4IResize)
- (BOOL)shouldAutorotate
{
  return [(NSNumber*)[B4IObjectWrapper raiseEvent:self :@"_shouldautorotate" :nil] boolValue];
}

#End If
 
Last edited:

Erel

Administrator
Staff member
Licensed User
1. Add this code to the main module:
B4X:
#if OBJC
@end
@interface UIViewController (B4IResize)

@end
@implementation UIViewController (B4IResize)
- (BOOL)shouldAutorotate
{
   if ([self isKindOfClass:NSClassFromString(@"MMDrawerController")]) {
       NSDictionary* map = [B4IObjectWrapper getMap:self];
       NSNumber* n = map[@"tag"];
       return n.boolValue;
   }
   return true;
}

#End If
2. Set smc.Tag to True or False. True = autorotate, False = no autorotate.
 

Filippo

Expert
Licensed User
Hello Erel,
Thanks for the modified routine.
But I have problems with the implementation, it does not work as easily as with the routine of the standard NavigationController.

I'll try a bit more, if it does not work then I'll remove the SideMenuController.
 

Filippo

Expert
Licensed User
Hi Erel,

After many tests I finally solved it, thanks again. :)

The implementation was a bit complicated but still feasible.
 
Top