SWReveal - 在应用程序启动时更改 frontviewcontroller

SWReveal - change frontviewcontroller on application start

我正在使用 SWRevealViewController 在我的应用程序中实现侧边菜单。在情节提要中,我设置了 sw_front segue。这个 segue 在每次启动应用程序时加载 MainView。现在我想让用户可以更改第一个显示的 viewcontroller。

我该怎么做?我知道有一个 属性 setFrontViewController: 但是在应用程序启动期间我应该在哪里使用它来加载前端?

我无法在 Storyboard 中设置的 frontViewControllerviewDidLoad 中使用它。这不可能是一个解决方案,所以我需要在每个视图控制器中执行此操作以获取并检查 "should load another view controller as first or frontViewController"

我已经了解你有什么问题和你想做什么我也有同样的事情要做,所以我所做的是在我的代码中也提到的 swrevealviewcontroller 中创建自定义 segue。 并修改了perform和loadstoryboardcontroller这两个方法,你也可以在我的代码中看到。 它肯定也适合你。

祝你编码愉快。

我的代码如下:

我已完成此操作,您需要更改的代码如下。

- (void)loadStoryboardControllers
{
if ( self.storyboard && _rearViewController == nil )
{
//Try each segue separately so it doesn't break prematurely if either Rear or Right views are not used.
@try
{
[self performSegueWithIdentifier:SWSegueRearIdentifier sender:nil];
}
@catch(NSException *exception) {}

@try
{
[self performSegueWithIdentifier:SWSegueFrontIdentifier sender:nil];
}
@catch(NSException *exception) {}

@try
{
[self performSegueWithIdentifier:SWSegueRightIdentifier sender:nil];
}
@catch(NSException *exception) {}
@try
{
[self performSegueWithIdentifier:SWSegueCustomIdentifier sender:nil];
}
@catch(NSException *exception) {}
}
}
#pragma mark - SWRevealViewControllerSegueSetController segue identifiers

NSString * const SWSegueRearIdentifier = @"sw_rear";
NSString * const SWSegueFrontIdentifier = @"sw_front";
NSString * const SWSegueRightIdentifier = @"sw_right";
NSString * const SWSegueCustomIdentifier = @"sw_custom";

#pragma mark - SWRevealViewControllerSegueSetController class

@implementation SWRevealViewControllerSegueSetController

- (void)perform
{
SWRevealControllerOperation operation = SWRevealControllerOperationNone;

NSString *identifier = self.identifier;
SWRevealViewController *rvc = self.sourceViewController;
UIViewController *dvc = self.destinationViewController;

if ( [identifier isEqualToString:SWSegueFrontIdentifier] )
operation = SWRevealControllerOperationReplaceFrontController;

else if ( [identifier isEqualToString:SWSegueRearIdentifier] )
         operation = SWRevealControllerOperationReplaceRearController;

else if ( [identifier isEqualToString:SWSegueRightIdentifier] )
operation = SWRevealControllerOperationReplaceRightController;

else if ( [identifier isEqualToString:SWSegueCustomIdentifier])//your conditional segue
operation = SWRevealControllerOperationReplaceFrontController;

if ( operation != SWRevealControllerOperationNone )
[rvc _performTransitionOperation:operation withViewController:dvc animated:NO];
}

@jogshardik 对我的问题有正确的答案,但我也找到了另一个解决方案。

在您的情节提要中,您正在将自定义转场 "sw_front" 与您的 viewcontroller 连接起来。这个 viewcontroller 在你的第一个前线 viewcontroller 的每个初始开始。所以如果你需要设置另一个前端viewcontroller,你只需要检查这个控制器。

我在此 "sw_front" viewcontroller 中设置了一个通知,并且还在您的 Side Menue View Controller 中添加了通知处理程序。

如果您想更改视图,只需触发通知,剩下的交给通知处理程序(设置您的 setFrontViewController: 属性)。

因此,如果您需要关注较新版本,这也有效并且更新稳定。

如果这些信息对您来说还不够,请给我一个提示,我会在有时间时 post 示例代码或项目。