登录视图后的 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];
我有一个具有登录视图的应用程序,然后在登录成功后我想要一个带有侧边菜单的视图。
我正在使用 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];