TableViews не работает с TabBarController Swift - PullRequest
0 голосов
/ 25 мая 2019

У меня есть приложение с tableView. Я решил добавить больше экранов с другими tableViews, поэтому я добавил tabBarController программно. Теперь я получаю найденную ошибку 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)
                   }
                }

             }

Ответы [ 3 ]

1 голос
/ 25 мая 2019

Вы используете SecondVC() для создания вашего контроллера.Это не относится к раскадровке, поэтому она не устанавливает никаких выходов.

Вам нужно либо построить иерархию контроллеров представления в раскадровке и позволить ей загружаться по умолчанию, либо получить свои контроллеры из раскадровки перед их добавлением.к контроллерам навигации.

См. документацию по:

func instantiateViewController(withIdentifier identifier: String) -> UIViewController
1 голос
/ 25 мая 2019

в классе с именем SecondVC у вас есть ссылка на выход для вашего экземпляра UITableView. Это означает, что вы создаете табличное представление в Stroyboard, поэтому вы не можете создать контроллер представления с использованием инициализатора, который вы должны использовать

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)
    }
}
0 голосов
/ 25 мая 2019

Похоже, что вы начинающий, если вы хотя бы от 2 до 3 дней опыта в ios , то выуже знает, что UITableView никогда не сможет загрузить в UiViewController , если вы не добавите делегат и источник данных

, если вы удалили его из viewDidLoad (), ваш проект может не загрузить UITableView в UiViewController

...