[swift] SnapKit으로 네비게이션 컨트롤 구현하기

SnapKit은 iOS 개발에서 AutoLayout을 쉽게 구현할 수 있는 라이브러리로 많이 사용됩니다. 이번 글에서는 SnapKit을 사용하여 네비게이션 컨트롤을 구현하는 방법을 알아보겠습니다.

필요한 라이브러리 추가하기

먼저, 프로젝트에 SnapKit을 추가해야 합니다. SnapKit은 CocoaPods를 통해 설치할 수 있습니다. Podfile 파일에 다음과 같이 작성하고, pod install 명령어를 실행하세요.

platform :ios, '10.0'
use_frameworks!

target 'YourProjectName' do
  pod 'SnapKit'
end

네비게이션 컨트롤 생성하기

네비게이션 컨트롤은 UINavigationController를 사용하여 생성할 수 있습니다. 이때, 네비게이션 컨트롤의 루트 뷰 컨트롤러로는 필요한 화면을 설정해주어야 합니다.

import UIKit
import SnapKit

class ViewController: UIViewController {
    
    // 네비게이션 컨트롤러 생성
    let navigationController = UINavigationController()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 루트 뷰 컨트롤러 설정
        let rootViewController = YourRootViewController()
        navigationController.viewControllers = [rootViewController]
        
        // 네비게이션 컨트롤러를 현재 화면에 추가
        addChild(navigationController)
        view.addSubview(navigationController.view)
        
        // 네비게이션 컨트롤러 뷰의 오토레이아웃 처리
        navigationController.view.snp.makeConstraints { make in
            make.edges.equalToSuperview()
        }
    }
}

네비게이션 바 설정하기

네비게이션 컨트롤러에는 기본적으로 네비게이션 바가 함께 포함되어 있습니다. 앱에 맞춰 네비게이션 바를 커스터마이징할 수 있습니다.

class YourRootViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 네비게이션 바 타이틀 설정
        navigationItem.title = "Your Title"
        
        // 네비게이션 바 배경색 설정
        navigationController?.navigationBar.barTintColor = UIColor.blue
        
        // 네비게이션 바 텍스트 색상 설정
        navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
        
        // 네비게이션 바 버튼 추가
        let rightButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addButtonTapped))
        navigationItem.rightBarButtonItem = rightButtonItem
    }
    
    @objc func addButtonTapped() {
        // 버튼을 눌렀을 때의 동작 구현
    }
}

네비게이션 컨트롤 이동하기

SnapKit을 사용하여 네비게이션 컨트롤러 간 이동을 구현할 수 있습니다.

class YourRootViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let nextViewController = YourNextViewController()
        
        let button = UIButton(type: .system)
        button.setTitle("Next", for: .normal)
        button.addTarget(self, action: #selector(nextButtonTapped), for: .touchUpInside)
        view.addSubview(button)
        
        button.snp.makeConstraints { make in
            make.center.equalToSuperview()
        }
        
        @objc func nextButtonTapped() {
            navigationController?.pushViewController(nextViewController, animated: true)
        }
    }
}

위와 같이 버튼을 생성하고, 버튼을 눌렀을 때 pushViewController 메서드를 사용하여 다음 화면으로 이동할 수 있습니다.

SnapKit을 사용하여 네비게이션 컨트롤을 손쉽게 구현할 수 있습니다. 해당 내용을 참고하여 자신의 프로젝트에 적용해보세요.

참고 자료