• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

self.navigationBar.topItem?.leftBarButtonItem을 해도 button이 보이지 않습니다

23.06.21 22:51 작성 23.06.21 23:09 수정 조회수 331

0

스크린샷 2023-06-21 오후 10.49.56.png강사님의 코드와 똑같이 코드를 구성했는데 버튼이 보이지 않습니다

스크린샷 2023-06-21 오후 10.50.54.pngaddsubView방식은 보이는 상황입니다 ㅠㅠ

혹시 바뀐부분이있는걸까요

답변 2

·

답변을 작성해보세요.

0

의성님의 프로필

의성

질문자

2023.06.21

저도 14.3.1로 확인을 헀습니다

제가 강의를 스토리보드로 구현하신부분을 코드로 구현하고있어 아래사진과같은방식으로 tabbar에 넣어준부분빼고는 다른점이 전혀없는데 이쪽에서 이런방식으로 구현한게 문제가 될수있을까요... 다시한번 확인해도 코드는 똑같습니다...스크린샷 2023-06-21 오후 11.46.32.png
스크린샷 2023-06-21 오후 11.42.15.png

거의 정답을 찾긴 하셨네요 이유만 이해하시면 될 것 같습니다.

네비게이션 뷰컨을 생성할 때 스토리보드 사용 유무가 객체 생성되는 시간에 영향을 미칩니다.

좀 더 풀어서 설명드리자면

스토리보드 있는상태로 네비뷰컨을 만들때는 네비의 rootViewController가 스토리보드에 이미 있는 상태로 만들게 됩니다.

그 뜻은 네비뷰컨을 생성하자마자 바로 topItem도 생성됨을 의미하는 것이죠.

그래서 viewDidLoad시점에 navigationBar의 topItem객체가 존재하는걸 확인할 수 있고 그 곳에 내가 원하는 설정도 가능합니다.

 

하지만 스토리보드 없이 네비뷰컨을 만들면 rootViewController설정할때 바로 되는게 아닌 vc가 생성되고 난 후 rootViewController가 셋팅되게 됩니다.

그러니 네비뷰컨을 생성하자마자 topItem이 생길수가 없습니다.

약간의 시간이 더 필요하게 되는것이죠

그것이 스토리보드 없이 네비뷰컨을 만들었을 때 viewDidLoad에서 topItem이 없게 되는 차이를 만들게 됩니다.

 

말씀하신것 처럼 이런건 구글링해도 안나오는 내용이니 잘 알아두시면 앞으로 개발하실 때 많은 도움이 되실 겁니다.

 

 

0

안녕하세요

 

지금 다시 해봤는데 문제없이 잘 되는걸 확인했습니다.

Xcode버전이 어떻게 되시나요

제가 지금 테스트한 건 14.3.1입니다.

 

의성님의 프로필

의성

질문자

2023.06.22

혹시몰라서 ViewController쪽에다가 해당코드를 넣어보니까 실행이되는 상황이라서 스크린샷 2023-06-22 오전 12.14.39.pngclass HomeNavigationViewController: UINavigationController 에 viewdidLoad안에다가 해당코드를 넣었을때는 실행이 안되고 왜 여기서는 실행이되는건지...

아무리 구글링을 해도 알수가없어서 혹시 예상하시는 이유가 있을까요

의성님의 프로필

의성

질문자

2023.06.22

스크린샷 2023-06-22 오전 12.25.02.png해당 코드를 viewwillappear에 넣어주니 정상적으로 작동하는데 이유가 뭔지 잘 모르겠네요ㅠㅠ 혹시 생명주기를 고려해야할 이유가 있을까요/...?