반응형

iOS 312

iOS swift 일반 뷰 컨트롤러에서 테이블 뷰 사용

UITableViewDataSource: 테이블을 구성하기 위해 필요한 메소드 정의 tableView(_:numberOfRowsInSection:) tableView(_:cellForRowAt:) UITableViewDelegate: 테이블에서 발생하는 액션/이벤트와 관련된 메소드 정의 tableView(_:didSelectRowAt:) 일반 뷰 컨트롤러에서 테이블 뷰 사용 1)테이블 뷰 객체를 직접 추가 2)테이블 뷰 셀 객체를 직접 추가 3)클래스에 UITableViewDataSource, UITableViewDelegate프로토콜 선언 4)테이블 뷰와 뷰 컨트롤러 사이에 [dataSource], [delegate] 항목을 연결

iOS swift 재사용 매커니즘

재사용 매커니즘 iOS특유의 부드러운 화면을 위해 사용되는 몇 가지 매커니즘 중 하나. 1) 테이블 뷰가 화면에 나타낼 셀 객체를 자신의 데이터 소스에게 요청. (tabelView(_:cellForRowAt:) 사용) 2) 데이터 소스는 테이블 뷰의 재사용 큐에서 사용 가능한 셀이 있는지 확인하여 만일 있으면 그 중 하나를 꺼내서 전달하고, 없으면 새로운 셀 생성 3) tabelView(_:cellForRowAt:)메소드가 셀의 콘텐츠를 구성한 다음 반환하면 테이블 뷰는 이 셀을 받아 화면에 표시. 4) 사용자가 테이블뷰를 스크롤함에 따라 화면을 벗어난 셀은 테이블 뷰에서 제거되지만, 완전히 삭제하는 것이 아니라 재사용 큐에 추가됨 5) 사용자의 스크롤에 따라 1~4 과정을 반복. 웹상의 섬네일 이미지를..

iOS swift REST API로부터 데이터를 읽어오기

REST API로부터 데이터를 읽어오기 1.URL 객체 생성 let url = "http://swiftapi.rubypapaer.co.kr:2029/hoppin/movies?version=1&page=1&count=10&genreId=&order=releasedateasc" let apiURI: URL! = URL(string: url) 2.REST API를 호출하여 응답 데이터를 받아오기 let apidata = try! Data(contentsOf: apiURI) 3.받아온 데이터를 확인하고자 로그로 출력하기 (필수는 아님) SSL보안 프로토콜이 적용된 네트워크는 접속시 https://를 사용. 이를 적용하지 않은 일반 프로토콜은 http://를 사용. 보안 프로토콜이 적용되지 않은 서버에 임의로 h..

iOS swift 네트워크 통신의 종류

네트워크 통신이 이루어지는 2가지 방식 1) TCP / UDP 를 사용하는 소켓 방식의 연결성 통신 2) HTTP, HTTPS, SMTP등의 프로토콜을 이용한 비연결성 통신 [1. 소켓 방식의 연결 지향 통신] 소켓을 이용한 네트워크 통신 방식은 보통 저수준 (low level) 통신을 통하여 구현됨. 일단 앱과 서버가 연결되면 한쪽에서 명시적으로 끊을 때까지 지속해서 연결을 유지하는 방식 1) TCP 연결: 데이터 유실을 방지하고 완전한 전송을 보장하지만 상대적으로 덜 빠르다 2) UDT 연결: 데이터의 완전한 전송을 보장하지 않지만, 상대적으로 더 빠름. [2. 비연결 지향 통신] 대표적으로 HTTP/HTTPS 프로토콜. 웹 서비스에 주로 사용된다. 비연결성 프로토콜은 요청이 들어오면 이에 맞는 응답..

iOS swift 셀프 사이징 셀

테이블뷰에서 셀프 사이징 셀: 직접 높이에 신경 쓸 필요없이 콘텐츠에 따라 자동으로 높이가 조절되므로 편리해진다. estimatedRowHeight 프로퍼티 : 셀 전체의 높이를 결정하기 전에 임시로 사용할 셀의 높이 값. UITableView.automaticDimension 객체 : 테이블 뷰의 rowHeight 속성에 대입되어 높이 값이 동적으로 설정될 것을 테이블 뷰에 알려주는 역할. viewWillAppear(_:) 메소드와 같은 적절한 시점에 넣어서 구현해주면 됨. viewDidLoad()는 아직 뷰가 화면에 구현되기 전 시점이므로 적절하지 않음. 구현 >> override func viewWillAppear(_ animated: Bool) { self.tableView.estimatedRow..

iOS swift A ?? B

A ?? B 만약 A가 nil이 아닐 경우 옵셔널을 해제하고, nil일 경우 대신 B값을 사용하라. 이 연산자를 사용하면 옵셔널 타입이 해제된다. 이 연산자의 앞쪽에는 옵셔널 값이, 뒤쪽에는 일반 값이 위치한다. 이 연산자의 뒤쪽에 위치한 일반 값의 타입은 앞쪽 옵셔널 값에서 옵셔널을 해제한 타입과 일치해야 한다. A != nil ? A! : B if A != nil { return A! } else { return B } 응용>> let cell = tableView.dequeueReusableCell(withIdentifier: "cell") ?? UITableViewCell() "cell"아이디를 가진 셀을 읽어와 옵셔널을 해제하되, 만약 그 값이 nil일 경우 UITableViewCell 인스턴스..

iOS swift 테이블 뷰의 행 높이를 결정하는 방식

테이블 뷰의 행 높이를 결정하는 방식 코코아 터치 프레임워크에서 2가지 방식 제공 1) 모두 동일한 높이를 갖는 방식 2) 각 셀마다 다른 높이를 갖는 방식 +self-sizing방식(내부 콘텐츠에 따라 동적으로 셀의 높이가 늘어나거나 줄어드는 방식) tableView(_:estimatedHeightForRowAt:) 테이블 뷰에서 특정 행의 높이를 설정하고 싶을 때 사용하는 메소드. UITableViewDelegate 프로토콜에 정의되어 있다. UITableView클래스에서 이미 구현되어 있으므로 커스텀 클래스에서는 override키워드를 붙여 재정의하는 방식으로 사용해야 한다. 각각의 행 높이를 다르게 제어해줄 수 있다. self.tableView.rowHeight =

iOS swift 이미지 객체로 인한 메모리 점유가 걱정될 때

이미지 객체로 인한 메모리 점유가 걱정될 때 UIImage(contentsOfFile:) 생성자를 사용해서 이미지 객체를 생성하는 것이 좋다. 이 생성자를 사용하여 생성된 이미지 객체는 캐싱되지 않는 특징이 있다. 이미지 데이터를 매번 다시 읽어와야 하므로 성능이 약간 저하될 수 있지만, 자주 호출되는 이미지가 아니라면 이 방식을 사용하는 것이 메모리 관리 면에서 효율적. var img = UIImage(contentsOfFile: ) 캐싱이란? 캐싱 = 데이터베이스나 파일 입출력 시스템 등에서 불러온 데이터를 메모리 등 고속으로 접근할 수 있는 곳에 임시로 저장해두고 (이를 캐시라고 함), 이후 동일한 데이터를 읽어야 할 때 임시 저장소에서 데이터를 읽어오는 처리 방식 vs. 위와 반면에, 메모리 걱정..

iOS swift 테이블 뷰 컨트롤러

테이블 뷰가 루트 뷰로 정의되어 있다. 목록 형식의 데이터를 화면에 표현하는 데 사용된다. 화면 전체가 목록으로 이루어진 인터페이스를 구현할 때 사용하는 컨트롤러. ex)iTunes앱의 재생목록 iOS환경설정(설정 정보 관리) 카테고리 선택 / 작성된 메모의 목록 보기 테이블 뷰 컨트롤러의 계층구조 1. 테이블뷰 컨트롤러 2. 테이블뷰 3. 테이블뷰 셀 (여려개의 행) 4. 콘텐츠 뷰 우리가 실제로 화면에서 보는 목록 각 행의 내용은 저마다의 콘텐츠가 콘텐츠뷰 내부에 적절히 배치된 결과물임. 섹션: 하나의 테이블 뷰 내에서 셀들을 그룹으로 묶을 수 있는 단위. 하나의 테이블 뷰 내에서도 섹션에 따라 다른 주제로 분류된 데이터를 보여줄 수 있다. ex)음악목록 - 추천음악목록, 내가 최근에 들은 음악 목록..

반응형