【Swift】 코드로 UITabBarController 구현

Storyboard를 사용하지 않고 코드에서 UITabBarController를 구현하는 방법 요약.

환경


  • Xcode12.4
  • Swift5

  • 1. 각 탭에 표시할 ViewController 준비



    이번에는, 다음의 파일을 신규 작성한다.
    · FirstViewController
    · SecondViewController
    · ThirdViewController
    · FourthViewController

    탭을 전환할 때 알기 쉽게 각 배경색만 변경해 둔다.

    FirstViewController
    import UIKit
    
    class FirstViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            view.backgroundColor = .red
        }
    }
    

    2. ViewController를 UITabBarController로 설정



    MainTabController
    import UIKit
    
    class MainTabController: UITabBarController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            configureViewControllers()
        }
    
        func configureViewControllers() {
    
            let first = FirstViewController()
            first.tabBarItem = UITabBarItem(title: "Home", image: UIImage(systemName: "house"), selectedImage: nil)
    
            let second = SecondViewController()
            second.tabBarItem = UITabBarItem(title: "Chat", image: UIImage(systemName: "message"), selectedImage: nil)
    
            let third = ThirdViewController()
            third.tabBarItem = UITabBarItem(title: "Book", image: UIImage(systemName: "book"), selectedImage: nil)
    
            let fourth = FourthViewController()
            fourth.tabBarItem = UITabBarItem(title: "Person", image: UIImage(systemName: "person"), selectedImage: nil)
    
            viewControllers = [first, second, third, fourth]
        }
    }
    



    Storyboard를 사용하지 않는 설정으로 변경



    처음에는 Main.storyboard 가 불리기 때문에 수정한다.
  • TARGETS > General > Development Info 의 메인 인터페이스를 비워 둡니다.
  • Info.plist의 Information Property List > Application Scene Manifest > Scene Configuration > Application Session Role > Item 0 > Storyboard Name 항목을 삭제합니다.
  • Info.plist의 Information Property List > Main storyboard file base name 항목을 삭제합니다.
  • SceneDelegate.swift를 수정한다.
  • func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    
            guard let scene = scene as? UIWindowScene else { return }
            window = UIWindow(windowScene: scene)
            window?.rootViewController = MainTabController()
            window?.makeKeyAndVisible()
        }
    

    좋은 웹페이지 즐겨찾기