내일배움캠프 앱개발 숙련 프로젝트
Super8oard
1. TabBarController
TabBarController에 Tab을 하나씩 추가, 각 Tab들은 하나씩의 뷰 혹은 네비게이션 컨트롤러에 접근할 수 있음!
class TabBarController: UITabBarController, UITabBarControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.tabBar.backgroundColor = .lightGray
let mapTab = MapViewController()
let mapTabItem = UITabBarItem(title: "지도", image: nil, tag: 0)
mapTab.tabBarItem = mapTabItem
let registerTab = RegisterViewController()
let registerTabItem = UITabBarItem(title: "킥보드 등록", image: nil, tag: 1)
registerTab.tabBarItem = registerTabItem
let myPageTab = MyPageViewController()
let myPageTabItem = UITabBarItem(title: "My Page", image: nil, tag: 2)
myPageTab.tabBarItem = myPageTabItem
self.viewControllers = [mapTab, registerTab, myPageTab]
}
}
- TabBarController 클래스를 하나 선언해주고, 이 안에서 사용하고 싶은 탭의 갯수만큼 탭 객체를 만들어 준다.
tabBarItem
을 만들 때 탭에 표시될 이미지를 넣을 수 있는데, 지금은 마땅한 아이콘 에셋을 구하지 않아서 nil
로 두었지만 에셋이 있는 경우에는 넣어주면 좋다.
2. MapViewController
NaverMap API를 ViewController에 담았다.
import UIKit
import NMapsMap
class MapViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let mapView = NMFNaverMapView(frame: view.frame)
view.addSubview(mapView)
mapView.showZoomControls = true
mapView.showLocationButton = true
mapView.showCompass = true
mapView.positionMode = .compass
}
}
- 지도 뷰 객체를 선언할 때
frame: view.frame
으로 선언해줬는데, 자동으로 TabBar의 윗 모서리 부분까지 해서 layout이 잡히는 것 같다. 왜냐면 NMFNaverMapView의 좌측 하단에는 Naver 로고가 위치하는데 이게 TabBar에 가리지 않고 좌측 하단 TabBar 위에 있었기 때문...
- 저는 코드로 UI의 위치를 처음 잡아보는 것이기 때문에... 익숙하지 않습니다.
- 어떤 뷰를
addSubView
할 때, Navigation, TabBar
는 자동적으로 침범당하지 않게 되는 것... 인가 봅니다. 실험을 하나 해보겠습니다.
- MapView를 하나의 NavigationController에 embeded 시킨 후, TabBarController로 접근해보면 궁금증이 해결될 것 같습니다.