BackButton
기본 형태는 위처럼 생겼다.
BackButton이 생기는 ViewController를 CalleeVC
CalleeVC를 호출하는 ViewController를 CallerVC 라고 부르겠다.
BackButton 색상 변경
CalleeVC의 viewDidLoad()에
self.navigationController?.navigationBar.tintColor = .green
색상이 변경된다.
BackButton Text 변경
"Back"이라는 Text는 Default값이다.
If) CallerVC의 title이 "CallerVC" 일때, CalleeVC의 BackButton의 Text는 "CallerVC"로 변경된다.
기본적으로 CallerVC의 title이 없으면 "Back", title이 있으면 해당 title이 적용된다.
* 직접 Text를 변경하고 싶다면
CalleeVC의 viewDidLoad()에서
self.navigationController?.navigationBar.topItem?.title = ""
를 선언하면
Text가 없는 BackButton이 생성된다.
UIBarButtonItem 사용
앞의 방법들은 BackButton을 사용하는 calleeVC의 viewDidLoad()에서 설정하는 방법이었다.
지금 방법은 calleeVC가 아닌 callerVC에 코드를 삽입하여 calleeVC의 BackButton을 변경하는 방법이다.
let backButton = UIBarButtonItem(title: "", style: .default, target: self, action: nil)
backButton.tintColor = .green
self.navigationItem.backBarButtonItem = backButton
위의 코드를 calleeVC가 아닌 callerVC에 삽입해주면 적용된다.
NavigationBar vs NavigationItem
사실 네비게이션을 조작하고 변경하고 커스텀하기 위해 self.navigationController. 까지 치면
XCode가 이 2가지를 알려준다.
그리고!! self.navigationItem도 존재한다.
그럼 대체 언제는 뭘 쓰고 언제는 뭘 써야해?
calleeVC에서는
self.navigationController?.navigationBar 를 사용하여 text와 Color를 변경했다.
callerVC에서 변경할 때는
self.navigationItem 을 사용하여 변경했다.
그렇다면 뭐가 다를까?
NavigationItem
The navigation item used to represent the view controller in a parent's navigation bar.
NavigationController에 push될 때, ViewController를 나타내기 위해 생성된 고유한 인스턴스 입니다.
속성에 접근하면 개체가 생성된다.(지연 방식인 듯?)
따라서, NavigationController를 사용하지 않는 경우에는 접근하면 안된다.
NavigationBar
The navigation bar managed by the navigation controller.
method와 property 를 사용하여 navigationBar의 외형을 customize할 수 있다.(title, backButton 등)
하지만 frame, bounds, alpha를 변경하면 안된다!!
navigtionBar를 hidden하기 위해서는
1. navigationBarHidden 프로퍼티를 사용하거나
2. setNavigationBarHidden:animated: 메소드를 사용하라
(+ navigationController?.navigationItem 은 잘 사용하지도 않을 뿐더러 동작하지 않는 것 같다.
-> 더 자세한건 직접 해봐야겠지만, 위에서 적용한 backButton 속성을 변경하는 예제도 돌아가지 않는다.)
'iOS' 카테고리의 다른 글
[iOS] UITableView 선택/삽입/삭제/이동 (0) | 2021.03.18 |
---|---|
[iOS] Animation - 1 (0) | 2021.03.17 |
[iOS] UITableView's Header/FooterView is following scroll(테이블 뷰 헤더/푸터가 스크롤을 따라와서 플로팅 될 때) (0) | 2021.03.04 |
[iOS] Image를 URLSession / Kingfisher를 통해 가져오기 (0) | 2021.03.02 |
[iOS] AutoLayout - 1 (0) | 2021.03.01 |