iOS 개발일지
0828 새싹 8주차 마무리 본문
iOS 앱 개발자 데뷔 과정 8주차 마무리
- Diary App
- 다이어리 앱 마무리 진행
- 3개의 탭 (달력, 검색, 설정) 으로 이루어진 탭바 컨트롤러로 앱 구성
검색 화면의 테이블뷰는 달력 화면 하단의 테이블뷰와 셀의 구성이 같기 때문에, 따로 파일을 만들지 않고 그대로 가져와 사용했다.
탭바를 구현하기 위해 우선 탭바 컨트롤러를 만들고, 탭바로 보여줄 뷰컨트롤러를 설정했다.
class TabBarController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
configureTabBarController()
}
func configureTabBarController() {
let firstVC = HomeViewController()
let firstNav = UINavigationController(rootViewController: firstVC)
let secondVC = SearchViewController()
let thirdVC = SettingViewController()
firstNav.tabBarItem = UITabBarItem(title: "달력", image: UIImage(systemName: "calendar.circle"), selectedImage: UIImage(systemName: "calendar.circle.fill"))
secondVC.tabBarItem = UITabBarItem(title: "검색", image: UIImage(systemName: "magnifyingglass.circle"), selectedImage: UIImage(systemName: "magnifyingglass.circle.fill"))
thirdVC.tabBarItem = UITabBarItem(title: "설정", image: UIImage(systemName: "gearshape.circle"), selectedImage: UIImage(systemName: "gearshape.circle.fill"))
setViewControllers([firstNav, secondVC, thirdVC], animated: true)
hidesBottomBarWhenPushed = false // 네비게이션VC로 푸쉬했을 때 밑에 바가 사라지는 것을 방지
tabBar.tintColor = .black
}
}
그리고 SceneDelegate에서 rootViewController로 설정하면 기본적인 구현이 완료된다.
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = (scene as? UIWindowScene) else { return }
window = UIWindow(windowScene: windowScene)
window?.rootViewController = TabBarController()
window?.makeKeyAndVisible()
}
- 검색 기능 구현
필터를 통해 검색을 구현하기 위해 어제 만들었던 UserDiaryRepository의 fetchFilter에 매개변수를 추가했다.
func fetchFilter(text: String) -> Results<UserDiary>! {
return localRealm.objects(UserDiary.self).filter("diaryTitle CONTAINS[c] '\(text)'")
}
그리고 searchBarSearchButtonClicked 메서드를 통해 fetchFilter를 호출하면 완료!
extension SearchViewController: UISearchBarDelegate {
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
if let text = searchBar.text, text != "" {
tasks = repository.fetchFilter(text: text)
}
}
}
- 테이블뷰로 백업 파일 보여주고, 셀 선택하면 바로 백업하기
형식은 갖춰졌고 기능도 동작하긴 하지만, 지금 데이터보다 더 작은 갯수로 백업이 진행될 경우 런타임 에러가 발생한다.
그렇지 않을 경우에도 바로바로 반영이 되지 않는 문제가 있어 더 고민해봐야 할 것 같다.
# 그 외
시뮬레이터 기기가 다를 경우 realm 데이터가 따로 저장된다...!
갑자기 기존 데이터가 사라지고, 제대로 코드 반영이 되지 않아 난감했는데 파일 위치가 다르기 때문이었다.
'SeSAC iOS 데뷔과정 2기' 카테고리의 다른 글
0830 새싹 41회차 정리 (0) | 2022.08.30 |
---|---|
0829 새싹 40회차 정리 - Codable (0) | 2022.08.29 |
0826 새싹 39회차 정리 (0) | 2022.08.26 |
0825 새싹 38회차 정리 - 백업/복구 (feat. UIDocumentPickerViewController) (0) | 2022.08.25 |
0824 새싹 37회차 정리 (0) | 2022.08.24 |