Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在SWRevealViewController之前登录视图控制器_Ios_Objective C_Uiviewcontroller_Parse Platform_Swrevealviewcontroller - Fatal编程技术网

Ios 在SWRevealViewController之前登录视图控制器

Ios 在SWRevealViewController之前登录视图控制器,ios,objective-c,uiviewcontroller,parse-platform,swrevealviewcontroller,Ios,Objective C,Uiviewcontroller,Parse Platform,Swrevealviewcontroller,我遵循parse.com教程,学习如何在注册或登录成功时实现登录+注册+切换到主控制器。这工作很漂亮 然后我想使用SWRevealViewController实现一个侧面导航。我在这方面遵循了APPCODA链接,只有当“SWRevealViewController”是初始视图控制器时,它才能工作 当我将解析登录控制器作为初始值时,我无法从导航控制器(也称为“SWRevealViewController”)中看到任何内容 我如何解决这个问题,使我的登录/注册控制器成为初始控制器,并且在登录/注册成

我遵循parse.com教程,学习如何在注册或登录成功时实现登录+注册+切换到主控制器。这工作很漂亮

然后我想使用SWRevealViewController实现一个侧面导航。我在这方面遵循了APPCODA链接,只有当“SWRevealViewController”是初始视图控制器时,它才能工作

当我将解析登录控制器作为初始值时,我无法从导航控制器(也称为“SWRevealViewController”)中看到任何内容

我如何解决这个问题,使我的登录/注册控制器成为初始控制器,并且在登录/注册成功时仍然能够使用SWRevealViewController

如果有任何帮助或指点,我将不胜感激

下面是我的APPDelegate.m

#import "AppDelegate.h"
#import <Parse/Parse.h>
#import <GoogleMaps/GoogleMaps.h>

@interface AppDelegate ()

@end

@implementation AppDelegate



- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

LoginView *lv = [[LoginView alloc]init];

SidebarViewController *sbvc = [[SidebarViewController alloc]init];
UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:lv];
UINavigationController *menuVC = [[UINavigationController alloc]initWithRootViewController:sbvc];

SWRevealViewController *revealController = [[SWRevealViewController alloc]initWithRearViewController:menuVC frontViewController:nav];
revealController.delegate = self;

self.menu = revealController;
self.window.rootViewController = self.menu;


[GMSServices provideAPIKey:@"XXXXXXXXXX"];

[Parse setApplicationId:@"XXXXXXXXXXXXX"
              clientKey:@"XXXXXXXXXXXXX"];

[PFAnalytics trackAppOpenedWithLaunchOptions:launchOptions];



  return YES;
    }
#导入“AppDelegate.h”
#进口
#进口
@接口AppDelegate()
@结束
@实现AppDelegate
-(BOOL)应用程序:(UIApplication*)应用程序使用选项完成启动:(NSDictionary*)启动选项{
LoginView*lv=[[LoginView alloc]init];
SidebarViewController*sbvc=[[SidebarViewController alloc]init];
UINavigationController*nav=[[UINavigationController alloc]initWithRootViewController:lv];
UINavigationController*menuVC=[[UINavigationController alloc]initWithRootViewController:sbvc];
SWRevealViewController*revealController=[[SWRevealViewController alloc]initWithRearViewController:menuVC frontViewController:nav];
revealController.delegate=self;
self.menu=revealController;
self.window.rootViewController=self.menu;
[GMS服务提供密钥:@“xxxxxxxxx”];
[解析setApplicationId:@“XXXXXXXXXXXX”
客户端密钥:@“xxxxxxxxxxxx”];
[PFAnalytics trackAppOpenedWithLaunchOptions:launchOptions];
返回YES;
}

以下是用户登录后如何交换导航层次结构:

UINavigationController版本 UITABBARC控制器版本
在这两个示例中,我创建了一个名为
ViewController1
的新类。在
UITabBarController
示例中,所有其余的类名也都由类名组成,仅供说明您需要输入类名。

以下是用户登录后如何交换导航层次结构:

UINavigationController版本 UITABBARC控制器版本
在这两个示例中,我创建了一个名为
ViewController1
的新类。在
UITabBarController
示例中,所有其余的类名也都由类名组成,仅供说明您需要输入类名。

在具有用户会话的应用程序中,通常最好将登录/注册保持在与应用程序其余部分不同的视图层次结构上,并在存在活动会话时显示内部结构。您可以通过检查

[PFUser currentUser]
因为如果用户未登录,它将返回
nil

在AppDelegate中提供如下检查:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // .. Rest of your initialization code

    if ([PFUser currentUser]) {

        // Let's pop them right to the home screen
        [self showHomeScreen];
    }
    else {

        // Present login vc
        LoginView *lv = [[LoginView alloc] init];
        UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:lv];
        self.window.rootViewController = nav;
    }
    return YES;
}

- (void)showHomeScreen {

    SidebarViewController *sbvc = [[SidebarViewController alloc] init];
    UINavigationController *menuVC = [[UINavigationController alloc] initWithRootViewController:sbvc];

    UIViewController *home = [[UIViewController alloc] init];
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:home];

    SWRevealViewController *revealController = [[SWRevealViewController alloc] initWithRearViewController:menuVC frontViewController:nav];

    self.window.rootViewController = revealController;
}
然后,通过包括

- (void)showHomeScreen;
AppDelegate.h
中,您可以在成功注册/登录后调用此方法:

AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[delegate showHomeScreen];

在具有用户会话的应用程序中,通常最好将登录/注册保持在与应用程序其余部分不同的视图层次结构上,并在存在活动会话时显示内部结构。您可以通过检查

[PFUser currentUser]
因为如果用户未登录,它将返回
nil

在AppDelegate中提供如下检查:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // .. Rest of your initialization code

    if ([PFUser currentUser]) {

        // Let's pop them right to the home screen
        [self showHomeScreen];
    }
    else {

        // Present login vc
        LoginView *lv = [[LoginView alloc] init];
        UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:lv];
        self.window.rootViewController = nav;
    }
    return YES;
}

- (void)showHomeScreen {

    SidebarViewController *sbvc = [[SidebarViewController alloc] init];
    UINavigationController *menuVC = [[UINavigationController alloc] initWithRootViewController:sbvc];

    UIViewController *home = [[UIViewController alloc] init];
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:home];

    SWRevealViewController *revealController = [[SWRevealViewController alloc] initWithRearViewController:menuVC frontViewController:nav];

    self.window.rootViewController = revealController;
}
然后,通过包括

- (void)showHomeScreen;
AppDelegate.h
中,您可以在成功注册/登录后调用此方法:

AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[delegate showHomeScreen];

好吧,我想起来了。就这样


不要创建到主视图控制器的segue,而是创建到SWRevealViewController。我认为SW将该控制器设置为“SW_front”。只有通过PFUser将其作为一个segue时,这才有效。

好的,所以我找到了答案。就这样


不要创建到主视图控制器的segue,而是创建到SWRevealViewController。我认为SW将该控制器设置为“SW_front”。这仅在通过PFUser将其作为一个segue时才起作用。

我刚刚了解了如何以编程方式从app delegate显示仪表板视图。使用SWRevealViewController和swift 2.0:

在main.storyboard上,您必须识别菜单视图(我指的不是导航控制器)

对于我的右侧菜单,identity inspector->identity->storyboardID='right2'

我左手边的菜单,叫它“rear2”

对于我的前视图,在显示仪表板视图的导航视图控制器上,我将标识设置为“dashboard”

在appdelegate中,在我的函数“didFinishLaunchingWithOptions”下:

//this is your main.storyboard
let storyboard = UIStoryboard(name: "Main", bundle: nil)

//initialize your FRONT view controller, ie my dashboard view, mine   is a UINavigationController, which then presents a table view , ie why i instantiate with a UINavigationController.

let frontviewcontroller = storyboard.instantiateViewControllerWithIdentifier("dashboard") as? UINavigationController


//initialize REAR View Controller- it is the LEFT hand menu. 

let rearViewController = storyboard.instantiateViewControllerWithIdentifier("rear2") as? UITableViewController

//initialize RIGHT View Controller - it is your RIGHT hand menu.

let rightViewController = storyboard.instantiateViewControllerWithIdentifier("right2") as? UITableViewController

let mainRevealController = SWRevealViewController()

mainRevealController.frontViewController = frontviewcontroller
mainRevealController.rightViewController = rightViewController
mainRevealController.rearViewController = rearViewController

self.window!.rootViewController = mainRevealController
self.window?.makeKeyAndVisible()
希望它能帮助别人。 非常感谢。
D.

我刚刚了解了如何以编程方式从app delegate显示我的仪表板视图。使用SWRevealViewController和swift 2.0:

在main.storyboard上,您必须识别菜单视图(我指的不是导航控制器)

对于我的右侧菜单,identity inspector->identity->storyboardID='right2'

我左手边的菜单,叫它“rear2”

对于我的前视图,在显示仪表板视图的导航视图控制器上,我将标识设置为“dashboard”

在appdelegate中,在我的函数“didFinishLaunchingWithOptions”下:

//this is your main.storyboard
let storyboard = UIStoryboard(name: "Main", bundle: nil)

//initialize your FRONT view controller, ie my dashboard view, mine   is a UINavigationController, which then presents a table view , ie why i instantiate with a UINavigationController.

let frontviewcontroller = storyboard.instantiateViewControllerWithIdentifier("dashboard") as? UINavigationController


//initialize REAR View Controller- it is the LEFT hand menu. 

let rearViewController = storyboard.instantiateViewControllerWithIdentifier("rear2") as? UITableViewController

//initialize RIGHT View Controller - it is your RIGHT hand menu.

let rightViewController = storyboard.instantiateViewControllerWithIdentifier("right2") as? UITableViewController

let mainRevealController = SWRevealViewController()

mainRevealController.frontViewController = frontviewcontroller
mainRevealController.rightViewController = rightViewController
mainRevealController.rearViewController = rearViewController

self.window!.rootViewController = mainRevealController
self.window?.makeKeyAndVisible()
希望它能帮助别人。 非常感谢。
D.

在登录视图控制器中创建按钮操作

你可以这样设置

  @IBAction func btnLoginAction(_ sender: UIButton) {

    let objAppDelegate = UIApplication.shared.delegate as! AppDelegate
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let rearViewController = storyboard.instantiateViewController(withIdentifier: "backTableVc") as? backTableVc
    let frontViewController = storyboard.instantiateViewController(withIdentifier: "ViewController") as? ViewController
    let naviRoot = UINavigationController(rootViewController: frontViewController!)
    naviRoot.navigationBar.isHidden = true
    let mainRevealController = SWRevealViewController()
    mainRevealController.frontViewController = naviRoot
    mainRevealController.rearViewController = rearViewController

    UIView.transition(from: (objAppDelegate.window?.rootViewController!.view)!, to: mainRevealController.view, duration: 0.6, options: [.transitionCrossDissolve], completion: {
        _ in
        objAppDelegate.window?.rootViewController = mainRevealController
    })
    objAppDelegate.window?.makeKeyAndVisible()

}

在登录视图控制器中,创建按钮操作

你可以这样设置

  @IBAction func btnLoginAction(_ sender: UIButton) {

    let objAppDelegate = UIApplication.shared.delegate as! AppDelegate
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let rearViewController = storyboard.instantiateViewController(withIdentifier: "backTableVc") as? backTableVc
    let frontViewController = storyboard.instantiateViewController(withIdentifier: "ViewController") as? ViewController
    let naviRoot = UINavigationController(rootViewController: frontViewController!)
    naviRoot.navigationBar.isHidden = true
    let mainRevealController = SWRevealViewController()
    mainRevealController.frontViewController = naviRoot
    mainRevealController.rearViewController = rearViewController

    UIView.transition(from: (objAppDelegate.window?.rootViewController!.view)!, to: mainRevealController.view, duration: 0.6, options: [.transitionCrossDissolve], completion: {
        _ in
        objAppDelegate.window?.rootViewController = mainRevealController
    })
    objAppDelegate.window?.makeKeyAndVisible()

}

当我必须在我的应用程序中执行类似的操作时(基本上,一次注册/登录完成后替换整个导航堆栈),我从一个
UINavigationController
开始(注册/登录完成后),推到我的根
UIViewController
,然后(在该控制器的
视图中显示:
)替换t