TableViews 不能与 TabBarController 一起工作 Swift
TableViews not working with TabBarController Swift
我有一个 tableView
的应用程序。我决定用其他 tableViews
添加更多屏幕,因此我以编程方式添加了 tabBarController
。现在我在这些行上收到 found nil 错误:
tableView.delegate = self
tableView.dataSource = self
如果我删除它们,tableView
不会加载。你知道我可能做错了什么吗?
我在主故事板上添加了一个 tabBarController
并将其链接到 swift 文件,但它也不起作用。
class SecondVC: UIViewController,UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
var SoundsClasss = [SoundsClass]()
override func viewDidLoad() {
super.viewDidLoad()
let p1 = SoundsClass(imageURL: "sound 01", audioURL: "01", videoTitle: "1", duration: 100)
let p2 = SoundsClass(imageURL: "sound 01", audioURL: "02", videoTitle: "2", duration: 100)
SoundsClasss.append(p1)
SoundsClasss.append(p2)
tableView.delegate = self
tableView.dataSource = self
}
代码为TabBarController
。我是否必须在此处更改任何内容以指定视图是 tableView
?
class MainTabBarController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
tabBar.barTintColor = UIColor.white
setupTabBar()
}
func setupTabBar(){
let FirstController = UINavigationController(rootViewController: MainVC())
let SecondController = UINavigationController(rootViewController: SecondVC())
let ThirdController = UINavigationController(rootViewController: ThirdVC())
viewControllers = [FirstController, SecondController,ThirdController]
guard let items = tabBar.items else { return }
for item in items {
item.imageInsets = UIEdgeInsets(top: 4, left: 0, bottom: -4, right: 0)
}
}
}
您正在使用 SecondVC()
创建您的控制器。这没有引用故事板,因此它没有设置任何出口。
您需要在情节提要中构建视图控制器层次结构并让它默认加载,或者在将控制器添加到导航控制器之前从情节提要中获取控制器。
请参阅以下文档:
func instantiateViewController(withIdentifier identifier: String) -> UIViewController
在名为 SecondVC
的 class 中,您有 UITableView 实例的出口引用,这意味着您在 Stoyboard 中创建了 table 视图,因此您不能使用你应该使用
的初始值设定项
UIStoryboard(name: "yourStoryBoardName", bundle: nil).instantiateViewController(withIdentifier: "yourViewcontrollerID")
setupTabBar 函数应该如下所示
func setupTabBar(){
let vc1 = UIStoryboard(name: "yourStoryBoardName", bundle: nil).instantiateViewController(withIdentifier: "yourFirstViewcontrollerID")
let vc2 = UIStoryboard(name: "yourStoryBoardName", bundle: nil).instantiateViewController(withIdentifier: "yourSecondViewcontrollerID")
let vc3 = UIStoryboard(name: "yourStoryBoardName", bundle: nil).instantiateViewController(withIdentifier: "yourThirdViewcontrollerID")
let FirstController = UINavigationController(rootViewController: vc1)
let SecondController = UINavigationController(rootViewController: vc2)
let ThirdController = UINavigationController(rootViewController: vc3)
viewControllers = [FirstController, SecondController,ThirdController]
guard let items = tabBar.items else { return }
for item in items {
item.imageInsets = UIEdgeInsets(top: 4, left: 0, bottom: -4, right: 0)
}
}
我有一个 tableView
的应用程序。我决定用其他 tableViews
添加更多屏幕,因此我以编程方式添加了 tabBarController
。现在我在这些行上收到 found nil 错误:
tableView.delegate = self
tableView.dataSource = self
如果我删除它们,tableView
不会加载。你知道我可能做错了什么吗?
我在主故事板上添加了一个 tabBarController
并将其链接到 swift 文件,但它也不起作用。
class SecondVC: UIViewController,UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
var SoundsClasss = [SoundsClass]()
override func viewDidLoad() {
super.viewDidLoad()
let p1 = SoundsClass(imageURL: "sound 01", audioURL: "01", videoTitle: "1", duration: 100)
let p2 = SoundsClass(imageURL: "sound 01", audioURL: "02", videoTitle: "2", duration: 100)
SoundsClasss.append(p1)
SoundsClasss.append(p2)
tableView.delegate = self
tableView.dataSource = self
}
代码为TabBarController
。我是否必须在此处更改任何内容以指定视图是 tableView
?
class MainTabBarController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
tabBar.barTintColor = UIColor.white
setupTabBar()
}
func setupTabBar(){
let FirstController = UINavigationController(rootViewController: MainVC())
let SecondController = UINavigationController(rootViewController: SecondVC())
let ThirdController = UINavigationController(rootViewController: ThirdVC())
viewControllers = [FirstController, SecondController,ThirdController]
guard let items = tabBar.items else { return }
for item in items {
item.imageInsets = UIEdgeInsets(top: 4, left: 0, bottom: -4, right: 0)
}
}
}
您正在使用 SecondVC()
创建您的控制器。这没有引用故事板,因此它没有设置任何出口。
您需要在情节提要中构建视图控制器层次结构并让它默认加载,或者在将控制器添加到导航控制器之前从情节提要中获取控制器。
请参阅以下文档:
func instantiateViewController(withIdentifier identifier: String) -> UIViewController
在名为 SecondVC
的 class 中,您有 UITableView 实例的出口引用,这意味着您在 Stoyboard 中创建了 table 视图,因此您不能使用你应该使用
UIStoryboard(name: "yourStoryBoardName", bundle: nil).instantiateViewController(withIdentifier: "yourViewcontrollerID")
setupTabBar 函数应该如下所示
func setupTabBar(){
let vc1 = UIStoryboard(name: "yourStoryBoardName", bundle: nil).instantiateViewController(withIdentifier: "yourFirstViewcontrollerID")
let vc2 = UIStoryboard(name: "yourStoryBoardName", bundle: nil).instantiateViewController(withIdentifier: "yourSecondViewcontrollerID")
let vc3 = UIStoryboard(name: "yourStoryBoardName", bundle: nil).instantiateViewController(withIdentifier: "yourThirdViewcontrollerID")
let FirstController = UINavigationController(rootViewController: vc1)
let SecondController = UINavigationController(rootViewController: vc2)
let ThirdController = UINavigationController(rootViewController: vc3)
viewControllers = [FirstController, SecondController,ThirdController]
guard let items = tabBar.items else { return }
for item in items {
item.imageInsets = UIEdgeInsets(top: 4, left: 0, bottom: -4, right: 0)
}
}