SWReveal - 在应用程序启动时更改 frontviewcontroller
SWReveal - change frontviewcontroller on application start
我正在使用 SWRevealViewController
在我的应用程序中实现侧边菜单。在情节提要中,我设置了 sw_front
segue。这个 segue 在每次启动应用程序时加载 MainView。现在我想让用户可以更改第一个显示的 viewcontroller。
我该怎么做?我知道有一个 属性 setFrontViewController:
但是在应用程序启动期间我应该在哪里使用它来加载前端?
我无法在 Storyboard 中设置的 frontViewController
的 viewDidLoad
中使用它。这不可能是一个解决方案,所以我需要在每个视图控制器中执行此操作以获取并检查 "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 示例代码或项目。
我正在使用 SWRevealViewController
在我的应用程序中实现侧边菜单。在情节提要中,我设置了 sw_front
segue。这个 segue 在每次启动应用程序时加载 MainView。现在我想让用户可以更改第一个显示的 viewcontroller。
我该怎么做?我知道有一个 属性 setFrontViewController:
但是在应用程序启动期间我应该在哪里使用它来加载前端?
我无法在 Storyboard 中设置的 frontViewController
的 viewDidLoad
中使用它。这不可能是一个解决方案,所以我需要在每个视图控制器中执行此操作以获取并检查 "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 示例代码或项目。