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

时间:2015-03-19 14:13:46

标签: ios uiviewcontroller storyboard segue swrevealviewcontroller

我正在使用SWRevealViewController在我的应用程序中实现侧面菜单。在故事板中,我设置了sw_front segue。这个segue在每次应用程序启动时加载MainView。现在我想让用户有可能更改第一个显示的viewcontroller。

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

我无法在故事板中设置的viewDidLoad的{​​{1}}中使用它。这可能不是一个解决方案,所以我需要在每个视图控制器中执行它来抓取并检查"应该将另一个视图控制器加载为第一个或frontViewController"

2 个答案:

答案 0 :(得分:3)

我已经明白你有什么问题以及你想做什么我也有同样的事情要做,所以我所做的就是在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];
}

答案 1 :(得分:0)

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

在故事板中,您将自定义segue“sw_front”与viewcontroller连接。这个viewcontroller是每个初始启动你的第一个前视图控制器。因此,如果您需要设置另一个前视图控制器,您只需要检入此控制器。

我在此“sw_front”viewcontroller中设置了一个通知,并在Side Menue View Controller中添加了通知处理程序。

如果您想更改视图,只需触发通知,然后让通知处理程序执行其余操作(设置setFrontViewController:属性)。

因此,如果您需要关注较新版本,这也可以正常运行并且更新稳定。

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