当我的应用程序通过我的 UITabBar 完成启动时,如何将加载的数据传递给 UITableView?
How can I pass data loaded when my application finished launching thru my UITabBar to a UITableView?
我是一名新 iOS 程序员,我正在尝试制作一个涉及以下流程的应用程序:
-> UITabBar -> UINavController -> UITableViewController.
最初当我有以下流程时程序正在运行:
-> UINavController -> UITableViewController
但是当我添加 UITabBar(使用 Embed In 方法)时,我遇到了两个问题:
1) 将初始视图从 UITableView 转换为 UITabBarView
2) 从 phone 的存档中恢复的数据没有加载到 TableView 中。
我设法解决了 UIStoryboard ID 的转换问题,但我不确定这种方式是否造成了第二个问题,即未正确将数据传递到 UITableView。
appDelegate 代码出现转换问题。这是我在合并 UITabBarView 之前的原始代码:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let navController = window!.rootViewController as! UINavigationController
let SLBprojectController = navController.topViewController as! GR8TableView
SLBprojectController.SLBprojectDB = thisSLBprojectDB
return true
}
上面代码的问题在于它告诉我它不能将 TableViewController (GR8TableView) 转换为 UITabBarView。我已通过在 Whosebug 论坛中进行以下搜索来解决此问题:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let mainStoryboardIpad : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let tabBarIntial : UITabBarController = mainStoryboardIpad.instantiateViewController(withIdentifier: "TabBar") as! UITabBarController
let navigationController:UINavigationController = mainStoryboardIpad.instantiateViewController(withIdentifier: "navController") as! UINavigationController
let navigationController1:UIViewController = mainStoryboardIpad.instantiateViewController(withIdentifier: "ViewController1")
let SLBprojectController = navigationController.topViewController as! GR8TableView
SLBprojectController.SLBprojectDB = thisSLBprojectDB
tabBarIntial.viewControllers = [navigationController, navigationController1]
tabBarIntial.selectedIndex = 0
return true
}
但是在我解决了 "casting" 问题之后,我在 TableView 中加载数据时遇到了问题。不确定这个问题是否与我修复转换问题的方式有关。
如有任何帮助,我们将不胜感激!
最简单的答案是返回与适用于您的逻辑类似的逻辑,但关系稍微复杂一些。例如,我创建了一个带有选项卡栏控制器、第一个选项卡中的导航控制器和嵌入导航控制器的 FirstViewController
的应用程序。
因为我没有数据库,所以我给 FirstViewController
一个名为 running
的实例变量。
以下代码查找控制器并设置变量:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
if let tabController = window!.rootViewController as? UITabBarController {
if let navController = tabController.viewControllers![0] as? UINavigationController {
if let firstController = navController.topViewController as? FirstViewController {
firstController.running = true
} else {
print("Unexpected controller in navigation hierarchy: \(String(describing: navController.topViewController))")
}
} else {
print("Unexpected contained controller: \(String(describing: tabController.viewControllers![0]))")
}
} else {
print("Unexpected root controller: \(String(describing: window!.rootViewController))")
}
return true
}
请注意,我没有创建任何新控制器。这都是默认故事板加载完成的。
我相信您应该能够将其适应您自己的变量和 class 名称。
我是一名新 iOS 程序员,我正在尝试制作一个涉及以下流程的应用程序:
-> UITabBar -> UINavController -> UITableViewController.
最初当我有以下流程时程序正在运行:
-> UINavController -> UITableViewController
但是当我添加 UITabBar(使用 Embed In 方法)时,我遇到了两个问题:
1) 将初始视图从 UITableView 转换为 UITabBarView 2) 从 phone 的存档中恢复的数据没有加载到 TableView 中。
我设法解决了 UIStoryboard ID 的转换问题,但我不确定这种方式是否造成了第二个问题,即未正确将数据传递到 UITableView。
appDelegate 代码出现转换问题。这是我在合并 UITabBarView 之前的原始代码:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let navController = window!.rootViewController as! UINavigationController
let SLBprojectController = navController.topViewController as! GR8TableView
SLBprojectController.SLBprojectDB = thisSLBprojectDB
return true
}
上面代码的问题在于它告诉我它不能将 TableViewController (GR8TableView) 转换为 UITabBarView。我已通过在 Whosebug 论坛中进行以下搜索来解决此问题:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let mainStoryboardIpad : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let tabBarIntial : UITabBarController = mainStoryboardIpad.instantiateViewController(withIdentifier: "TabBar") as! UITabBarController
let navigationController:UINavigationController = mainStoryboardIpad.instantiateViewController(withIdentifier: "navController") as! UINavigationController
let navigationController1:UIViewController = mainStoryboardIpad.instantiateViewController(withIdentifier: "ViewController1")
let SLBprojectController = navigationController.topViewController as! GR8TableView
SLBprojectController.SLBprojectDB = thisSLBprojectDB
tabBarIntial.viewControllers = [navigationController, navigationController1]
tabBarIntial.selectedIndex = 0
return true
}
但是在我解决了 "casting" 问题之后,我在 TableView 中加载数据时遇到了问题。不确定这个问题是否与我修复转换问题的方式有关。
如有任何帮助,我们将不胜感激!
最简单的答案是返回与适用于您的逻辑类似的逻辑,但关系稍微复杂一些。例如,我创建了一个带有选项卡栏控制器、第一个选项卡中的导航控制器和嵌入导航控制器的 FirstViewController
的应用程序。
因为我没有数据库,所以我给 FirstViewController
一个名为 running
的实例变量。
以下代码查找控制器并设置变量:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
if let tabController = window!.rootViewController as? UITabBarController {
if let navController = tabController.viewControllers![0] as? UINavigationController {
if let firstController = navController.topViewController as? FirstViewController {
firstController.running = true
} else {
print("Unexpected controller in navigation hierarchy: \(String(describing: navController.topViewController))")
}
} else {
print("Unexpected contained controller: \(String(describing: tabController.viewControllers![0]))")
}
} else {
print("Unexpected root controller: \(String(describing: window!.rootViewController))")
}
return true
}
请注意,我没有创建任何新控制器。这都是默认故事板加载完成的。
我相信您应该能够将其适应您自己的变量和 class 名称。