Ios SWRevealViewController-手动切换到其他视图?

Ios SWRevealViewController-手动切换到其他视图?,ios,objective-c,Ios,Objective C,我有一个侧边栏菜单,是用SWRevealViewController制作的 侧边栏中的菜单元素之一是“登录”。它打开登录视图(通过自定义SWRevealViewController segue) 我想在用户成功登录后以编程方式切换到另一个视图。我该怎么做 更新,我的代码: ViewController *vc = [[ViewController alloc] init]; // this is main front ViewController SWRevealViewController *

我有一个侧边栏菜单,是用SWRevealViewController制作的

侧边栏中的菜单元素之一是“登录”。它打开登录视图(通过自定义SWRevealViewController segue)

我想在用户成功登录后以编程方式切换到另一个视图。我该怎么做

更新,我的代码:

ViewController *vc = [[ViewController alloc] init]; // this is main front ViewController
SWRevealViewController *revealController = self.revealViewController;
[revealController setFrontViewController:vc animated:YES];
在此之后,我得到的只是空屏幕。我做错了什么?我觉得这是错误的:

ViewController *vc = [[ViewController alloc] init];
那么,访问已加载的视图控制器的正确方法是什么?(它在应用程序启动时由SWRevealViewController作为前端控制器加载)

使用
-(void)设置frontViewController:(UIViewController*)已设置动画的frontViewController:(BOOL)已设置动画方法

SWRevealController有自己的属性,您可以从任何UIViewController访问:

SWRevealViewController *revealController = self.revealViewController;
您可以在其GitHub存储库中查看示例项目: 试试这个:

ViewController *vc = [[ViewController alloc] init]; // this is main front ViewController
UINavigationController* navController = (UINavigationController*)self.revealViewController.frontViewController;
[navController setViewControllers: @[vc] animated: YES];
// [navController pushViewController:vc animated:YES]; // use this if you want to stack the views
[self.revealViewController setFrontViewPosition: FrontViewPositionLeft animated: YES];
试试这个:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
SecondViewController *rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:rootViewController];
[navController setViewControllers: @[rootViewController] animated: YES];

[self.revealViewController setFrontViewController:navController];
[self.revealViewController setFrontViewPosition: FrontViewPositionLeft animated: YES];

为我工作:-)

有一个新的API
-(void)pushFrontViewController:(UIViewController*)frontViewController动画:(BOOL)动画

据我所知,这是在视图控制器之间手动切换时正确设置动画的最优雅的方式

// get the view controller you want to push to properly.
// in this case, I get it from Main.storyboard
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController * vc = [sb instantiateViewControllerWithIdentifier:@"SignInViewController"];

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:vc];

[navController setViewControllers: @[vc] animated:NO];
[self.revealViewController pushFrontViewController:navController animated:YES];
如果您所在的目标vc中没有导入
SWRevealViewController
,并且希望推回:

// get your vc properly
[self.navigationController setViewControllers:@[vc] animated:YES];

请注意,
[self.navigationController showViewController:vc发送者:self]
具有相同的结果,但不要使用它,因为这会在导航堆栈上创建一个新的视图控制器,这在使用
SWRevealViewController

时基本上没有意义。这一个非常适合我

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
ViewController *rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"ViewController"];

UINavigationController *navController = [storyboard instantiateViewControllerWithIdentifier:@"NavController"];
[navController setViewControllers: @[rootViewController] animated: YES];

[self.revealViewController setFrontViewController:navController];
[self.revealViewController setFrontViewPosition: FrontViewPositionLeft animated: YES];

以下是setFrontViewController解决方案的Swift版本:

if let secondViewController = self.storyboard?.instantiateViewControllerWithIdentifier("SecondViewControllerStoryBoardID") as? SecondViewController {
  let navController = UINavigationController(rootViewController: secondViewController)
  navController.setViewControllers([secondViewController], animated:true)
  self.revealViewController().setFrontViewController(navController, animated: true)
} 

@Evana有一个很好的答案,但是对于我将参数传递给destViewController的情况,我需要改进如下。通过严格遵循她的示例,我注意到DestViewController viewDidLoad被调用了两次。首先,“selectedId”上有0,只有第二次调用“selectedId”接收到我的标记值

因此,为了实现更清晰的导航,必须从navController获取DestViewController,这样就没有多余的调用

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

UINavigationController *navController = [storyboard instantiateViewControllerWithIdentifier:@"DestNavController"];

DestViewController *destViewController = (DestViewController*)[[navController viewControllers] objectAtIndex:0];

destViewController.selectedId = ((UIButton*)sender).tag;

[self.revealViewController setFrontViewController:navController];

谢谢但是你能解释一下我如何从其他类访问这个方法吗?(我是iOS新手)我已经导入了
#导入“SWRevealViewController.h”
-但是我怎样才能让SWRevealViewController的当前实例调用它的方法呢?你在启动时在哪里创建提到的控制器?你可以在GitHub页面上查看示例项目,我已经更新了我的答案你能帮我吗兄弟@vburojevic。这两天我都累了。我仍然没有得到解决方案,你能告诉我如何通过代码将SWREvealview控制器设置为根视图控制器吗。。。plsI没有以编程方式实现它,但它应该是这样的:使用
-(id)initWithRearViewController:(UIViewController*)rearViewController frontViewController:(UIViewController*)frontViewController
和“MenuViewController”作为后视图控制器,NavigationController作为前视图控制器。希望如此helps@benaneesh我正在通过presentViewController()移动到视图控制器。在viewDidLoad()中,我实现了这个方法,但总是在self.revealViewController()的viewcontroller中得到一个nill值。任何想法??presentViewController()不使用当前的navigationcontroller,这就是您的问题所在。请不要以模式显示它,或者找出如何使用当前导航控制器,并以新的viewcontroller作为frontviewcontroller以模式显示它。您能否告诉我如何通过代码将SWREvealview控制器设置为根视图控制器。。。对于拥有不同故事板的人,这就是我的代码的样子(参考上面的代码):UIStoryboard*故事板=[UIStoryboard storyboard with name:@“OrderHistory”bundle:nil];UINavigationController*navController=[情节提要实例化初始视图控制器];[self.revealViewController setFrontViewController:navController];[self.revealViewController setFrontViewPosition:FrontViewPositionLeft动画:是];在frontview的子视图上,每次调用mainviewcontroller方法的方法时,即使它们之间没有任何导航,有人能帮我吗(你好@Brian我需要你的帮助!请检查我的问题你好兄弟@Brian,你能检查我的链接吗?我也尝试了将近一周:(.我不知道如何解决这个问题。:(我正在通过presentViewController()和viewDidLoad()移动到视图控制器),我正在实现这个方法,但我总是在self.revealViewController()的viewcontroller中得到一个nill值。你知道吗?你能看看我的这个问题吗?我在这个问题上很挣扎。我有一个问题,我不知道如何解决。你能检查一下这个bro@teapeng吗?