Ios 解析-绕过AppDelegate中的登录
我正在努力绕过登录屏幕,如果当前用户不是零。为此,我遵循了上面的建议。运行代码后,我在模拟器中得到一个空白的白色视图,没有显示任何错误。代码如下:Ios 解析-绕过AppDelegate中的登录,ios,swift,parse-platform,Ios,Swift,Parse Platform,我正在努力绕过登录屏幕,如果当前用户不是零。为此,我遵循了上面的建议。运行代码后,我在模拟器中得到一个空白的白色视图,没有显示任何错误。代码如下: storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()); let currentUser = PFUser.currentUser() print(currentUser) if currentUser != nil
storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle());
let currentUser = PFUser.currentUser()
print(currentUser)
if currentUser != nil {
self.window?.rootViewController = storyboard?.instantiateViewControllerWithIdentifier("HomeViewController");
}
值得一提的是,HomeViewController基于选项卡导航。我错过了什么
我的设置是:
- 应用程序启动,第一个视图是登录视图(带有注册按钮)。这个初始视图是SignenViewController,我在其中嵌入了一个UINavigationController李>
- 用户可以通过提供凭据登录(如果正确,则执行segue以重定向到HomeViewController)
- 用户可以注册并遵循步骤(多个控制器)。最后,它们将被重定向到主视图控制器
- 您能提供更多信息吗
这是我检查是否有人已经登录的方式
override func viewDidAppear(animated: Bool) {
let currentUser = PFUser.currentUser()
if currentUser != nil {
self.performSegueWithIdentifier("nameOfTheSegueIdentifier", sender: self)
}
}
我假设您的主页选项卡栏控制器具有标识符
“HomeViewController”
,您的登录视图控制器具有标识符“SigningViewController”
,并且此代码位于您的didFinishLaunchingWithOptions()
AppDelegate方法中:
storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
if let currentUser = PFUser.currentUser() { // currentUser is not nil
// set up app for valid in user
self.window?.rootViewController = storyboard?.instantiateViewControllerWithIdentifier("HomeViewController")
return true // don't load the rootViewController from your storyboard (if you have an initial view set)
} else { // there is no current user
// set up app for new or non logged in user
self.window?.rootViewController = storyboard?.instantiateViewControllerWithIdentifier("SignInViewController")
return true
}
从您的评论中,听起来您有一个导航控制器,其根视图控制器是您的登录视图控制器,这就是为什么当您切换到选项卡栏控制器时,您会得到一个导航栏
由于使用我的方法无法获得segue(以及登录视图控制器的导航栏),请初始化一个新的UINavigationController
,并将其rootViewController
设置为您的选项卡栏控制器:
if let currentUser = PFUser.currentUser() { // currentUser is not nil
// load tab bar controller
let tabBarController = storyboard?.instantiateViewControllerWithIdentifier("TabBarViewController")
// initialize a new navigation controller with the tab bar controller as its rootViewController
let navC = UINavigationController(rootViewController: tabBarController)
// set the window's root view controller to be your new navigation controller
self.window?.rootViewController = navC
}
通常
PFUser.currentUser()
不是零。您应该使用PFUser.currentUser().username
。在您的登录/注册视图控制器中使用此代码(不是AppDelegate(它工作正常))
在这段代码中需要注意两件事:它是在viewdide
方法中执行的;不viewDidLoad
。在视图出现之前,不能执行任何分段。另外,SEGUE
是您的SEGUE名称的临时占位符。此序列应将用户转移到主页
注意:给定的代码将显示
登录/注册viewcontroller的
场景约一秒钟。我建议在ViewController
上放置一个与视图框架相同的UIImageView
(覆盖整个屏幕)。如果用户名等于nil,则可以放置一条else语句,说明imageView.alpha=0
(在viewDidLoad中将alpha设置为1)。希望这有帮助。看起来你应该把rootViewController=yourtabarviewcontroller
放在哪里?因为如果用户未登录,他们将不会进入登录或注册视图。您使用的是自定义登录视图还是默认的解析视图?@TekShock custom我相信。我正在更新我的帖子,其中描述了我的设置。你在这里所做的是在一个特定的视图控制器中。处理检查用户是否登录的最佳实践是在AppDelegate类中。这将加载HomeControllerView,但由于选项卡控制器已就位,因此没有所有选项卡。知道怎么解决吗?@ksa_coder是故事板中的选项卡栏控制器?给它一个情节提要ID,并用上面选项卡栏控制器的ID替换HomeViewController。确定这样做了…但视图没有完全正确显示。选项卡栏显示正确,但顶部导航栏在所有选项卡上完全消失。我很高兴你能帮忙:)@ksa_编码器我想我明白你的意思。我已经更新了答案,将选项卡栏控制器包装在UINavigationController
中。让我知道这是否有效。你好,JAL。虽然它在自动登录时确实如前所述工作,但我刚刚发现,当我第一次从SignInViewController登录时,导航栏不会显示!知道怎么解决吗?
override func viewDidAppear(animated: Bool) {
if PFUser.currentUser().username != nil {
self.performSegueWithIdentifier("SEGUE", sender: self)
}
}