iOS실무 12주차
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
를 추가해 레이블이 둥근 모서리를 가지도록 수정한다