아삭아삭 iOS 개발

[TIL] 2022.07.21 (SeSAC iOS) 본문

TIL(Today I Learned)

[TIL] 2022.07.21 (SeSAC iOS)

바닐라머스크 2022. 7. 21. 23:51

 

오늘 공부한 내용들을 내가 잊지 않기 위해 기록합니다.

틀린 내용이 있을 수 있는 점 참고 부탁드립니다 :)

 

■ 오늘의 과제

[과제1] 코드를 사용해서 화면전환 구현해보기

 

  • 메인화면에서 RightBarButton 선택 시, 검색화면(SearchViewController)으로 이동
    • 스토리보드에 bar item 추가한 후, 액션 연결해서 아래 코드를 추가했다.
    • 이동할 화면이 다른 스토리보드 파일에 존재할 경우, 별도 상수를 선언해서 해당 스토리보드를 가져와서 연결하지만
      내 프로젝트의 경우 동일한 스토리보드내에 모든 화면이 함께 있어서 self.storyboard?로 처리했다
    • iOS 13 이전에는 modalPresentationStyle의 기본값이 fullscreen이었는데, iOS13 이후부터는 기본값이 page sheet
      → page sheet은 상단에 약간 공간이 있어서 현화면 아래에 다른 화면이 있음을 사용자가 알 수 있게됨
      → 그래서 .fullscreen으로 설정해서 화면 꽉차게 해줌
            
// 상단 검색버튼 클릭시 화면전환
@IBAction func searchButtonTapped(_ sender: UIBarButtonItem) {
        
    let vc = self.storyboard?.instantiateViewController(withIdentifier: SearchViewController.identifier) as! SearchViewController

    let nav = UINavigationController(rootViewController: vc)
        
    nav.modalPresentationStyle = .fullScreen
        
    self.present(nav, animated: true)
}

 


  • 검색화면(SearchViewController)에서 LeftBarButtonItem 선택시 dismiss
    • 위에서  rootview를 SearchViewController로 두고 네비게이션 컨트롤러를 설정해줬다.
       그래서 SearchViewController에서 navigationItem으로 닫기 버튼 추가함
    • #selector 사용해서 버튼액션 연결 완료!
func configureNav() {
    navigationItem.leftBarButtonItem = UIBarButtonItem(image: UIImage(systemName: "xmark"), style: .plain, target: self, action: #selector(closeButtonTapped))
}
    
@objc
func closeButtonTapped() {
    self.dismiss(animated: true)
}

 


  • 메인화면에서 컬렉션뷰 item 선택시 상세화면(DetailViewController)으로 이동
    • didSelectItemAt를 매개변수로 한 collectionView함수안에 이동하는 코드를 적용했다.
    • toast팝업 코드 따로, 화면이동(push) 코드 따로 두었더니 팝업이 보이기도 전에 화면이 이동해버렸다..
      → 그래서 toast completion 코드안에 화면이동 코드를 넣고
      → 팝업표기 duration은 0.5초로 줄여주었음
      (이전에 넷플릭스 회원가입 화면에서 가입완료 팝업 '확인'클릭과 동시에 화면이동시 코드와 유사)

(출처 : https://github.com/scalessec/Toast-Swift)

// [참고] toast 라이브러리의 샘플코드

// toast presented with multiple options and with a completion closure
self.view.makeToast("This is a piece of toast", duration: 2.0, point: CGPoint(x: 110.0, y: 110.0), title: "Toast Title", image: UIImage(named: "toast.png")) { didTap in
    if didTap {
        print("completion from tap")
    } else {
        print("completion without tap")
    }
}
// 위 샘플코드 참고하여 화면이동 코드 적용 완료

override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        
    // toast 팝업 끝까지 보여준 이후에 화면이동
    view.makeToast("월간 베스트 \(indexPath.item + 1)위 도서를 선택했습니다.", duration: 0.5, position: .center) { _ in
        let pushVC = self.storyboard?.instantiateViewController(withIdentifier: DetailViewController.identifier) as! DetailViewController
        self.navigationController?.pushViewController(pushVC, animated: true)
    }
}

 


  • 상세화면(DetailViewController)에서 임의의 버튼 클릭 시, 웹 링크화면(MoreDetailViewController)이 등장
    • 버튼 클릭시 실행되는 액션내에 push 화면전환 코드 추가했다
    • 아래 코드를 보면 알 수 있듯이, 무조건 실행한다고 화면을 전환하는 것이 아니라!
      navigationController? 가 있니?없니? 하고 확인해서 있으면 push해서 화면이 전환된다.
@IBAction func buttonTapped(_ sender: UIButton) {
        
    let pushVC = self.storyboard?.instantiateViewController(withIdentifier: MoreDetailViewController.identifier) as! MoreDetailViewController
    self.navigationController?.pushViewController(pushVC, animated: true)

}

 


 

마무리

코드리뷰 받은 내용이나, 헷갈리는 내용들 정리한다는게 점점 (섞여서)쌓이고 있다

부지런하게 정리해서 얼른 올려야지ㅠㅠ

 

iOS 공부하면 하루종일 앉아서 모니터만 보게 될 것 같아서 여름부터 새로운 운동시작했는데 하길 잘한 것 같다. (팔은 부들부들 떨리지만)

이제 새싹 프로그램 시작한지 3주 지났는데(와 벌써), 앞으로 남은 5개월도 빡세게 하려면

진짜 체력 필수..

 

이번주 주말은 평가과제로 불태울 생각에 기대된다 야호오오오오

'TIL(Today I Learned)' 카테고리의 다른 글

[TIL] 2022.07.28 (SeSAC iOS)  (0) 2022.07.28
[TIL] 2022.07.22 (SeSAC iOS)  (0) 2022.07.22
[TIL] 2022.07.20 (SeSAC iOS)  (0) 2022.07.20
[TIL] 2022.07.19 (SeSAC iOS)  (0) 2022.07.19
[TIL] 2022.07.18 (SeSAC iOS)  (0) 2022.07.18