登录视图后的 SWRevealViewController

SWRevealViewController after a login view

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

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

这是行不通的。这是我在 prepareForSegue 方法中唯一的代码,我删除了 if 语句,因为我在登录视图中只有一个 segue,所以我认为我不需要 IF。 我应该从情节提要中删除 SWRevealViewController 吗?或者从登录视图转到 SWRevealViewController 我不知道该怎么办。 对于在视图而不是第一个视图中使用 SWRevealViewController 的情况没有任何解释。 我正在为 iOS 为 objective c 为 iPhone 构建此应用程序。 请帮忙。 谢谢。

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

  • 拖一个ViewController,把一个class改成SWRevealViewController.
  • 拖动一个ViewController嵌入NavigationController。将 class 名称更改为 LoginViewController.
  • 将您的 NavigationController 的 故事板 ID 更改为 "LoginNavigationController"。

  • 将名为 sw_front 的新自定义转场从 SWRevealViewController 分配给 NavigationController,并将转场的 class 更改为 SWRevealViewControllerSegueSetController.

  • 拖动一个具有 TableView 的控制器作为子视图,它是侧边栏的 MenuViewController

  • 将名为 sw_rear 的新自定义 segue 从 SWRevealViewController 分配给 MenuViewController 并更改 class 到 SWRevealViewControllerSegueSetController.

  • 现在拖动一个名为HomeViewController的ViewController嵌入NavigationController并赋值带有标识符“Home”和 class 的自定义 segue 以及 SWRevealViewControllerSeguePushController.

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

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

下面是编码部分:

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 此通知。

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

当用户注销时将标志 iSUserSignedIn 设置为 nil 并且 post 此通知。

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