一旦用户成功登录我的应用并选择存储他们的凭据,我就会跳过我的初始视图控制器(登录页面)。
我的新根视图控制器是一个TabBarController,因为我的应用程序的导航使用TabBar。
但是,在应用程序中,我有TableViews,它们之前是各自的NavigationController。在这些TableView中,我在TabBar上面有一个黑条。如果我导航到下一个TableView,那么黑条会加倍,如果我进入下面的TableView,那么黑条现在是第一个的3倍。
以下是一些截图;由于敏感数据我添加了灰色条来掩盖实时数据。
我在我的didFinishLaunchingWithOptions方法的AppDelegate(使用Swift)中有这个:
if let api_key = NSUserDefaults.standardUserDefaults().stringForKey("key") {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let tabBarController = storyboard.instantiateViewControllerWithIdentifier("TabBarC") as! MyTabBarController
if let window = self.window {
window.rootViewController = tabBarController
}
}
我应该实例化内部导航控制器吗?如果是这样,我该如何做到这一点,因为我的TabBar已经为4个选项卡提供了4个NavigationControllers,我将在哪里插入在应用程序深处找到的其他NavControllers?
更新 我能够通过
解决黑条虫我还找到了另一种方式来跳过"跳过"我的登录屏幕,无需在我的应用程序委托中实例化视图控制器。
伪代码 在storyboard中,为登录和tabBar视图控制器之间的segue添加一个ID。
In the login VC
view did load
hide the textboxes
if key exists {
performSegue(id: <segwayid>
} else {
show the login textboxes
答案 0 :(得分:0)
O.K,在您的项目设置中。不要设置主故事板。
并将您的代码更改为以下内容:
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
var rootController = nil
if let api_key = NSUserDefaults.standardUserDefaults().stringForKey("key") {
rootController = storyboard.instantiateViewControllerWithIdentifier("TabBarC") as! MyTabBarController
}
else {
rootController = storyboard.instantiateViewControllerWithIdentifier("LoginController") as! LoginController // Change this line according to your project.
}
self.window!.rootViewController = rootController
self.window!.makeKeyAndVisible()
答案 1 :(得分:0)
我怀疑您将每个money
更改为不在view's frame
下的代码。
您应该查看UITabBar
中的loadView
(如果是),viewDidLoad
,viewWillAppear
或viewDidAppear
方法。