2016-02-13 81 views
0

我有一个应用程序有一个登录视图,然后在登录成功后,我想有一个侧面菜单的视图。 我使用SWRevealViewController来制作幻灯片菜单。 但正如我所说的问题是登录视图将是第一个观点不是SWRevealViewController。 我试图在prepareForSegue方法内执行以下操作。SWRevealViewController在登录视图后

SWRevealViewController *revealViewController; 
[revealViewController initWithRearViewController: [self.storyboard instantiateViewControllerWithIdentifier:@"MenuTableViewCell"]frontViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"HomeViewController"]]; 

这是行不通的。这是我有prepareForSegue方法中唯一的代码,我删除if语句,因为我只有一个LoginView内一个赛格瑞所以我想我不需要IF。 我应该删除故事板的SWRevealViewController?或登录以SWRevealViewController 我不知道该怎么办让SEGUE。 有没有解释的情况使用SWRevealViewController意见里面不是第一个视图。 我正在构建这个应用程序的iOS为iPhone的目标C. 请帮忙。 谢谢。

+0

你可以试试这个对我有用。 [Answer](https://stackoverflow.com/a/48959896/4845562) – kalpesh

回答

3

你应该做你的故事板的层次结构是这样的。

  • 将一个的ViewController并更改类SWRevealViewController。
  • 拖动一个ViewController嵌入NavigationController。将课程名称更改为LoginViewController
  • 将您的导航控制器的故事板ID更改为“LoginNavigationController”。

  • 分配新的自定义命名赛格瑞sw_front从SWRevealViewController到NavigationController和变化类SEGUE到SWRevealViewControllerSegueSetController。

  • 将具有的TableView作为一个子视图这是您的MenuViewController用于边栏的控制器。

  • 分配到MenuViewController从SWRevealViewController命名sw_rear新的自定义赛格瑞和变化类SEGUE到SWRevealViewControllerSegueSetController。

  • 现在拖动一个视图控制器名为HomeViewController嵌入NavigationController与标识符 “” 与类别SWRevealViewControllerSeguePushController指定自定义SEGUE。

  • 将NavigationController的故事板ID更改为“HomeNavigationController”。

这应该是故事板中的设置。

Storyboard structure

现在这里是编码部分:

In SWRevealViewController.m 

- (void)viewDidLoad{ 

[super viewDidLoad]; 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(userSignedInSuccessfully) name:kUserSignedInNotification object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(userSignOutSuccessfully) name:kUserSignedOutNotification object:nil]; 

    // this flag should be maintained in user defaults 
    if(iSUserSignedIn){ 

    //Show Home page if user is already signed in 
    [self showHomeScreen]; 
    } 
} 

#pragma mark - Show Home screen 

-(void)showHomeScreen 
{ 
    UINavigationController *navigation = [[UIStoryboard storyboardWithName:kStoryboardName bundle:nil] instantiateViewControllerWithIdentifier:@"HomeNavigationController"]; 

[self setFrontViewController:navigation]; 
[self setFrontViewPosition:FrontViewPositionLeft]; 
} 

-(void)showLoginScreen{ 

    UINavigationController *navigation = (UINavigationController *)[[UIStoryboard storyboardWithName:kStoryboardName bundle:nil] instantiateViewControllerWithIdentifier:@"LoginNavigationController"]; 

    [self setFrontViewController:navigation]; 
    [self setFrontViewPosition:FrontViewPositionLeft]; 
} 

现在,当用户签署,第一次保存标志iSUserSignedIn用户默认值,并张贴此通知。

//Post notification for successful sign in 
[[NSNotificationCenter defaultCenter] postNotificationName:kUserSignedInNotification object:nil]; 

当用户退出设置标志iSUserSignedIn到零,并张贴此通知。

//Post notification for successful sign out 
[[NSNotificationCenter defaultCenter] postNotificationName:kUserSignedOutNotification object:nil]; 
+0

在登录视图中,如果用户登录成功,我应该以编程方式编写segue吗?登录成功后应该实例化哪个视图? mene或homeview?我真的很感谢你的回答!非常感谢! –

+0

对不起,我认为登录成功后我可以拥有(showHomeScreen)方法。 –

+0

它没有移动到登录视图,直到我改变主视图实例化(showHomeScreen)方法的方式-----这里是如何:UIViewController * vcNew = [[UIStoryboard storyboardWithName:@“Main”bundle:NULL] instantiateViewControllerWithIdentifier :@ “HomeViewController”]; //切换前视图控制器并显示 [self.revealViewController setFrontViewController:vcNew]; [self.revealViewController setFrontViewPosition:FrontViewPositionLeft animated:YES]; –