iOS앱개발

iOS실무 12주차

rhehfl010 2025. 5. 22. 16:43

iOS 앱은 보통 여러 개의 화면(ViewController)으로 구성되는데 
그중에서 가장 처음 표시되는 화면(최상위 뷰 컨트롤러)을 "루트 뷰 컨트롤러"라고 부른다.

이 루트 뷰 컨트롤러는 앱 전체 화면을 차지하며, 이후 새로운 화면을 push하거나 modal로 띄울 때 기준이 된다.

 

 

 

Action Segue vs Manual Segue

정의 방법 Interface Builder에서 Control + 드래그로 생성 코드에서 performSegue(withIdentifier:)로 실행
트리거 버튼, 셀 클릭 등 UI 이벤트에 자동 연결됨 코드로만 실행 가능
식별자 필요 여부 선택 사항 (필요 시 identifier 부여) 필수 (identifier로 실행 대상 지정 필요)
재사용성 UI에 의존적이어서 재사용이 어려움 로직 조건에 따라 동적으로 실행 가능
사용 예시 버튼을 눌렀을 때 자동으로 다음 화면 이동 로그인 성공 시 조건적으로 다음 화면 이동 등

 

 

네비게이션 컨트롤러 생성

 

 

myCell과 view Controller를 연결합니다
이러면 myCell 클릭 시 우측의 view가 보이게 됩니다.

 

func prepare(for segue: UIStoryboardSegue, sender: Any?)

iOS에서 화면 전환(Segue)이 일어나기 직전에 호출되는 메서드입니다.
새 화면으로 데이터를 전달하거나 초기 설정을 할 때 사용하는 곳이에요.

 

segue.destination으로 다음에 넘어갈 뷰 컨트롤러를 가져올 수 있는데 이는 부모형을 반환하기 때문에 타입 캐스팅이 필요하다

 

  override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let dest = segue.destination as! DetailViewController
        let myIndexPath = table.indexPathForSelectedRow!
        let row = myIndexPath.row
        dest.movieName = (movieData?.boxOfficeResult.dailyBoxOfficeList[row].movieNm)!
        
    }

table에서 각 셀의 행을 가져와 영화 데이터의 인덱스에 접근한다.

각 영화 이름을 잘 가져와서 다른 뷰에 넘겨줄 수 있다.

 

기존 label은 제거하고 webkitVIew를 화면 가득 채워준다

이를 클래스에 연결하면 에러가 나는데 간단하게 import를 해주면 해결된다

   guard let url = URL(string: "https://m.naver.com") else { return }
        let request = URLRequest(url: url)
        webVIew.load(request)

이와같은 방식으로 웹을 띄울 수 있다.

 let urlKorString = "https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=\(movieName)"
        let urlString = urlKorString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!
        guard let url = URL(string: urlString) else { return }

url 인코딩을 하는 함수를 통해 한국어 -> 퍼센트 인코딩 방식으로 바꾸어 쿼리에 넣어주면

이와같이 영화 이름으로 네이버에 자동으로 검색이 되도록 할  수 있다.

새로운 탭 바 컨트롤러를 생성 후 
새로운 뷰를 하나 만들어 연결해준다.
여기에는 네이버 지도를 연결해주기 위해 마찬가지로 웹킷뷰를 화면에 꽉 차게 채워준다

네이버 지도를 띄우는 코드를 입력 하면 이와같이 화면이 나오는것을 볼 수 있다.

Key Path : layer.masksToBounds Type: Boolean, Value : 체크

Key Path : layer.cornerRadius, Type: Number, Value : 7
를 추가해 레이블이 둥근 모서리를 가지도록 수정한다